28. december 2006 - 13:25Der er
5 kommentarer og 1 løsning
Retuner nyeste distinct
Jeg har en tabel der indeholder følgende: Kundenavn, Dato, Værdi, etc (Det er de 3 vigtige felter)
Hvert kundenavn optræder mange gange med forskellige datoer, og muligvis forskellige værdier. Det kunne være: Kunde - Dato - Værdi B - 03.12.06 - 4 A - 12.12.06 - 5 C - 09.12.06 - 8 B - 12.12.06 - 9 A - 11.12.06 - 3 A - 09.12.06 - 5 B - 10.12.06 - 2 C - 20.12.06 - 7
Det jeg skal bruge er den sidste/nyeste værdi for hver kunde, altså: A - 12.12.06 - 5 B - 12.12.06 - 9 C - 20.12.06 - 7
Group By Kundenavn giver ikke den nyeste værdi. SELECT Kundenavn, Dato, Værdi FROM Tabel GROUP BY Kundenavn
Distinct giver enten kun kundenavn eller kun hvor alle felter er unikke (hvilket er alle rows) SELECT DISTINCT Kundenavn FROM Tabel SELECT DISTINCT Kundenavn, Dato, Værdi FROM Tabel
Dato skal være den højeste/nyeste færdi. Kun en værdi pr unik Kundenavn. Værdien fra højeste/nyeste dato.
id navn dato 1 Hans 2006-01-01 2 Peter 2006-01-02 3 Kurt 2006-01-11 4 Søren 2006-01-10 5 Ole 2006-01-08 6 Ole 2006-01-09 7 Hans 2006-01-07 8 Hans 2006-01-06 9 Hans 2006-01-05 10 Kurt 2006-01-04
Med
select id,navn,dato from tabel1 where (navn,dato) in (select navn,max(dato) from tabel1 group by navn)
får jeg
2 Peter 2006-01-02 3 Kurt 2006-01-11 4 Søren 2006-01-10 6 Ole 2006-01-09 7 Hans 2006-01-07
Der går nok noget galt, hvis samme dato står ved samme navn flere gange.
Er det noget du skal gøre tit, kan det måske betale sig at have en tabel, som du altid opdaterer med den nyeste dato for hver person. Så er forespørgslen billigere.
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.