20. februar 2010 - 12:24
Der er
7 kommentarer og 1 løsning
SQL hent en feltværdi pr X antal rækker i en tabel - loop
Hej Jeg har en database med 41 millioner rækker. Hhver række har et dato felt - date_of_creation, et fortløbende Id felt. Jeg skal gruppere data på en måde så jeg ved start dato og slut dato indenfor hver f.eks 200.000 række. Som udgangspunkt kender jeg ikke dato værdierne, det er dem jeg gerne vil have fat i: ønsket resultat: 1-200.000 start_dato : 01-01-2000 1-200.000 slut_dato : 01-15-2000 200.000 - 400.000 start_dato : 01-15-2000 200.000 - 400.000 slut_dato : 01-19-2000 400.000 - 600.000 start_dato : 01-19-2000 400.000 - 600.000 slut_dato : 02-10-2000 ..... jeg har svært ved at sammensætte en SQL der giver dette udfald, men håber en af jer kan give en hint eller måske give en teori om hvordan jeg skal strukturere min SQL. på forhånd tak. /werge
Annonceindlæg fra Kingston Technology
20. februar 2010 - 15:30
#1
Hvis der er en hurtig forbindelse mellem applikation og database vil jeg finde det fristende bare at lave en: SELECT * FROM tabel ORDER BY date_of_creation og lade applikationen notere sig de værdier du skal bruge.
20. februar 2010 - 15:38
#2
Hvis du er på 2005 eller nyere kan du prøve: SELECT n,date_of_creation FROM (SELECT date_of_creation,ROW_NUMBER() OVER (ORDER BY date_of_creation) n FROM tabel) x WHERE n % 200000 = 1 OR n % 200000 = 0 ORDER BY n
21. februar 2010 - 20:14
#3
Hej arne_v, Jeg kører på en SQL 2005, så jeg vil teste din seneste forslag. Det første forslag vil give 41 millioner rækker i resultat og jeg forventer egentligt kun 205 rækker i resultatet, et resultat pr 200.000 der findes. /Jesper
21. februar 2010 - 20:18
#4
Det er en kompleks operation du ønsker udført. Jeg vil ikke garantere at den sidste er hurtigere end bare at hente alle rækker og lade applikationen tage række 1, 200000, 200001, 400000 etc..
21. februar 2010 - 20:40
#5
ja det er kompleks og skal heldigvis kun køre ganske få gange direkte på databasen, for at få de datoer som skal bruges i en anden forbindelse. Der er ingen applikation i den anden ende. Der er ingen der til går databasen, så den er helt fri, så hvis SQL Querien skulle tage flere timer, så er det helt i orden :) /Jesper
21. februar 2010 - 20:51
#6
Så prøv teknikken der er beskrevet i #2 og se hvordan det går.
22. februar 2010 - 09:37
#7
Hej arne_v, Du er sku for sej, det virker selvfølgelige lige som jeg ønsker det. Du må lige smide et svar. tak for hjælpen, endnu engang. /Jesper
22. februar 2010 - 15:04
#8
svar
Computerworld tilbyder specialiserede kurser i database-management