[AccessD] Select every nth record

Arthur Fuller fuller.artful at gmail.com
Fri May 18 13:03:23 CDT 2007


That will work fine in SQL too, as long as the PKs are sequential.

Arthur


On 5/18/07, Mark A Matte <markamatte at hotmail.com> wrote:
>
> John,
>
> If I were going to attempt this in SQL Server...I would probably use a
> cursor in query analyzer...determine if the current record count is
> divisable by your specified nth number...if so call an SP to write that
> record.
>
> In access I would use the function below to get a sequential record
> number...and "[record Number] MOD nth" in the query and filter for
> 0.  This
> would get you every nth record.
>
> Example Every 4th record upto 1000 cases
> ********SQL*******
> SELECT TOP 1000 tblPurvi.case_id, tblPurvi.case_type INTO tblTest
> FROM tblPurvi
> WHERE (((MyAutoCtr([case_id]) Mod 4)=0));
> *******************
>
> I had 8000 records in tblPurvi...I ran this...gave me 1000 records...I
> joined tblText back to tblPurvi...and showed that it in fact chose every
> 4th
> record.  MyAutoCtr is the only non native function...and if you have a PK
> that is sequential...you don't even need MyAutoCtr...just the filtered MOD
> nth.
>
> Good luck,
>
> Mark A. Matte
>
>
> >From: "jwcolby" <jwcolby at colbyconsulting.com>
> >Reply-To: Access Developers discussion and problem
> >solving<accessd at databaseadvisors.com>
> >To: "'Access Developers discussion and problem
> >solving'"<accessd at databaseadvisors.com>
> >Subject: Re: [AccessD] Select every nth record
> >Date: Fri, 18 May 2007 11:53:14 -0400
> >
> >Thanks for the suggestion.  I am trying to figure out something generic
> >here.  What often happens (not in this case) is my client says "give me a
> >count where...".  When the count comes up as 523,417 they will then say,
> >give me every nth record in order to select 200,000 records.  I have to
> >track the exact records selected since they may come back later and say,
> >every Nth record for another 200,000 NOT IN the first 200,000.  Etc.
> >
> >I do not know how to even approach such a problem with SQL alone.  The
> >"exactly 200K records" is the killer for me.  I think I can use a TOP
> >(200000) ORDER BY NEWID(), but I still have to track the "already used" -
> >probably a simple SELECTED field.
> >
> >In THIS SPECIFIC CASE, the client said "every other record" which has a
> >specific meaning.  I am asking him if he really means that or not.
> >
> >
> >John W. Colby
> >Colby Consulting
> >www.ColbyConsulting.com
> >-----Original Message-----
> >From: accessd-bounces at databaseadvisors.com
> >[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Mark A Matte
> >Sent: Friday, May 18, 2007 11:36 AM
> >To: accessd at databaseadvisors.com
> >Subject: Re: [AccessD] Select every nth record
> >
> >John,
> >
> >I do something similar to get duplex printing of postcards.  There is a
> >sample db on the DBA website under the 2002 conference page.
> >
> >Basically I create an autonumber in a query using the function
> MyAutoCtr()
> >...(module below)...Then I filter out the even number records using the
> MOD
> >function.
> >
> >Hope that helps...let me know if you have any questions.
> >
> >Thanks,
> >
> >Mark A. Matte
> >
> >
> >************Module***************
> >Global lngTableCounter As Long
> >
> >Function MyAutoCtr(prmAny)
> >'Trick is to pass a field from the input table(s) so that function called
> >for each record 'otherwise Access thinks that the function will always
> >return the same value and 'only calls it once, and every output record
> gets
> >the same value MyAutoCtr = lngTableCounter lngTableCounter =
> >lngTableCounter
> >+ 1 End Function
> >************Module***************
> >
> >
> > >From: "jwcolby" <jwcolby at colbyconsulting.com>
> > >Reply-To: Access Developers discussion and problem
> > >solving<accessd at databaseadvisors.com>
> > >To: "'Access Developers discussion and problem
> > >solving'"<accessd at databaseadvisors.com>
> > >Subject: [AccessD] Select every nth record
> > >Date: Fri, 18 May 2007 11:06:18 -0400
> > >
> > >Is there a SQL statement that will do this directly?  I have a table of
> > >40K records and I want to split it into two tables, each containing
> > >every other record of the 40K record table.
> > >
> > >John W. Colby
> > >Colby Consulting
> > >www.ColbyConsulting.com
> > >
> > >--
> > >AccessD mailing list
> > >AccessD at databaseadvisors.com
> > >http://databaseadvisors.com/mailman/listinfo/accessd
> > >Website: http://www.databaseadvisors.com
> >
> >_________________________________________________________________
> >Catch suspicious messages before you open them with Windows Live Hotmail.
> >
> http://imagine-windowslive.com/hotmail/?locale=en-us&ocid=TXT_TAGHM_migratio
> >n_HM_mini_protection_0507
> >
> >
> >
> >--
> >AccessD mailing list
> >AccessD at databaseadvisors.com
> >http://databaseadvisors.com/mailman/listinfo/accessd
> >Website: http://www.databaseadvisors.com
>
> _________________________________________________________________
> More photos, more messages, more storage—get 2GB with Windows Live
> Hotmail.
>
> http://imagine-windowslive.com/hotmail/?locale=en-us&ocid=TXT_TAGHM_migration_HM_mini_2G_0507
>
>
> --
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
>
>



More information about the AccessD mailing list