Avatar billede dankerlinnet Nybegynder
13. april 2011 - 18:15 Der er 9 kommentarer og
1 løsning

Query !

Håber nogen kan hjælpe mig med følgende Query.

Jeg har en stor tabel som bl.a. indeholder følgende felter og ex. på værdier.


|  ID  |  sID  |  Date      |  .....
----------------------------------------------
|  1    |  10  |  21102011  |
|  2    |  10  |  21102011  |
|  3    |  10  |  01012012  |
|  4    |  10  |  01012012  |
|  5    |  10  |  16012013  |
|  6    |  10  |  16012013  |
|  7    |  23  |  02032011  |
|  8    |  23  |  02032011  |
|  9    |  23  |  03032012  |
|  10  |  23  |  03032012  |
|  11  |  99  |  21102011  |
|  12  |  99  |  21102011  |
|  13  |  99  |  21102012  |

Det jeg har brug for er en Query som med en INTO opretter en tabel som kun indeholder rækkerne med den først registrerede "Date" for samme "sID".

Ovenstående eksempel skal medføre følgende resultat:

|  ID  |  sID  |  Date      |  .....
----------------------------------------------
|  1    |  10  |  21102011  |
|  2    |  10  |  21102011  |
|  7    |  23  |  02032011  |
|  8    |  23  |  02032011  |
|  11  |  99  |  21102011  |
|  12  |  99  |  21102011  |


Har rodet med det en måneds tid uden held, og var på nippet til at slette rækkerne manuelt, indtil jeg regnede på hvor lang tid det ville tage at gennemgå 17 mill poster ;-)

Håber nogen kan give et bud på problemet.

Jakob Danker Linnet
Avatar billede arne_v Ekspert
13. april 2011 - 18:48 #1
proev:

INSERT INTO nytabel
SELECT id,sid,dato
FROM gltabel g1
WHERE dato = (SELECT MIN(dato) FROM gltabel g2 WHERE g2.sid=g1.sid)
Avatar billede dankerlinnet Nybegynder
13. april 2011 - 21:05 #2
Interessant... Kunne godt være løsningen. Her er hvad den originale query så bør hedde. Får bare en fejlmelding jeg ikke helt kan tolke !


[SQL] SELECT * into temp
FROM "Total" as g1
WHERE "AnkomstDato" = (SELECT MIN("AnkomstDato") FROM "Total" as g2 WHERE "g2"."PatientCPR"="g1"."PatienCPR")

[Err] ERROR:  column g1.PatienCPR does not exist
LINE 3: ...Dato") FROM "Total" as g2 WHERE "g2"."PatientCPR"="g1"."Pati...
                                                            ^
Avatar billede arne_v Ekspert
14. april 2011 - 03:49 #3
Total tabellenhar tilsyneladende ikke et PatienCPR felt.
Avatar billede dankerlinnet Nybegynder
14. april 2011 - 12:48 #4
Jo, "PatientCPR" findes i Tabellen. Kan det have betydning at "AnkomstDato" er af typen Varchar og ikke Date ?
Avatar billede dankerlinnet Nybegynder
14. april 2011 - 20:57 #5
Din where forespørsel er kun bundet til from g2 og den kan derfor ikke genkende g1
Avatar billede arne_v Ekspert
14. april 2011 - 23:59 #6
In tabel i outer query boer kunne bruges i inner query.
Avatar billede dankerlinnet Nybegynder
15. april 2011 - 00:14 #7
Hej Arne....

Tror faktisk du har ret. Tjekkede syntax'en og en enkelt stavefejl :-)

Selvom det en kørsel på 17mill linier nok tager et par dage, virker den når jeg kører den på en sub population af databasen.

Jeg takker mange gange for hjælpen. Både på dette spm og tidligere.

Mvh

Jakob Danker
Avatar billede arne_v Ekspert
15. april 2011 - 00:18 #8
Med de rette index burde det ikke tage saa lang tid.
Avatar billede arne_v Ekspert
05. maj 2011 - 02:23 #9
hmmm
Avatar billede dankerlinnet Nybegynder
09. maj 2011 - 20:45 #10
Kunne ikke acceptere dit svar, hvorfor jeg ikke kunne give dig de 30 point. Opretter et nyt spm, svar evt. blankt på dette, så jeg kan acceptere og overføre point til dig.
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