Avatar billede jesperwerge Nybegynder
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
Avatar billede arne_v Ekspert
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.
Avatar billede arne_v Ekspert
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
Avatar billede jesperwerge Nybegynder
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
Avatar billede arne_v Ekspert
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..
Avatar billede jesperwerge Nybegynder
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
Avatar billede arne_v Ekspert
21. februar 2010 - 20:51 #6
Så prøv teknikken der er beskrevet i #2 og se hvordan det går.
Avatar billede jesperwerge Nybegynder
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
Avatar billede arne_v Ekspert
22. februar 2010 - 15:04 #8
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester