Det jeg har brug for er en række for hver navn og et minimum tid hvor status er 0 og en maksimum tid hvor status er 1.
DVS Resultat settet af den query jeg har brug for er: NAME STARTTIME ENDTIME ------------------------------------------------- Test 15-02-2006 08:56 15-02-2006 16:45| Test2 15-02-2006 14:21 15-02-2006 17:11|
SELECT Name, (SELECT Min(Date) FROM Contact WHERE Status = 0 AND Name_ID = Name.ID) AS StartTime, (SELECT Max(Date) FROM Contact WHERE Status = 1 AND Name_ID = Name.ID) AS EndTime FROM Name
Men må jeg ikke foreslå at du bruger nogle andre navne?
Dette er kun et data set jeg har fundet på for at gøre det mere simpelt, I min rigtige database er der primær nøgler og rigtige navne. Jeg prøver lige din løsning.
Det kaldes en SubQuery, og det smarte er at man kan sige Name_ID = Name.ID
Man kan også lave det med et INNER JOIN, hvor man laver en slags virtuelle tabeller og giver dem et alias, her t1 og t2:
SELECT Name, StartTime, EndTime FROM Name INNER JOIN (SELECT Name_ID, Min(Date) AS StartTime FROM Contact WHERE Status = 0 GROUP BY Name_ID) t1 ON t1.Name_ID = Name.ID INNER JOIN (SELECT Name_ID, Max(Date) AS EndTime FROM Contact WHERE Status = 1 GROUP BY Name_ID) t2 ON t2.Name_ID = Name.ID
Jeg ved det ikke, jeg tror ikke der er den store forskel i performance. Jeg ville gætte på at den første performer bedst.
Synes godt om
Ny brugerNybegynder
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.