|
| Query eller SP Fra : Peter Larsen |
Dato : 09-10-03 20:47 |
|
Hej
Jeg har en tabel med med typer, dato og vand%
Mit problem er at der kan være flere af samme type men med forskellige
datoer. ex.
Type Dato Vand%
2 10-11-2000 54,4
3 09-03-1999 53,2
3 23-09-1999 55,0
3 30-11-2001 54,6
4 12-10-2001 52,3
4 29-03-2002 56,2
5 12-12-2000 51,6
Jeg ønsker følgene:
2 10-11-2000 54,4
3 30-11-2001 54,6
4 29-03-2002 56,2
5 12-12-2000 51,6
Altså 1 af hver type med den nyeste dato.
Jeg arbejder i MSSQL 2000
Er dette mulig med en query eller SP
/Peter
--
Med venlig hilsen
PL-DATA
Peter Larsen
pl@pl-data.dk
98 97 13 30
| |
Ole Nielsby (09-10-2003)
| Kommentar Fra : Ole Nielsby |
Dato : 09-10-03 22:48 |
|
"Peter Larsen" <snulle10@c.dk> skrev i en meddelelse
news:3f85bb19$0$23326$ba624c82@nntp03.dk.telia.net...
> Hej
>
> Jeg har en tabel med med typer, dato og vand%
>
> Mit problem er at der kan være flere af samme type men med forskellige
> datoer. ex.
>
> Type Dato Vand%
> 2 10-11-2000 54,4
> 3 09-03-1999 53,2
> 3 23-09-1999 55,0
> 3 30-11-2001 54,6
> 4 12-10-2001 52,3
> 4 29-03-2002 56,2
> 5 12-12-2000 51,6
>
> Jeg ønsker følgene:
> 2 10-11-2000 54,4
> 3 30-11-2001 54,6
> 4 29-03-2002 56,2
> 5 12-12-2000 51,6
>
> Altså 1 af hver type med den nyeste dato.
>
> Jeg arbejder i MSSQL 2000
>
> Er dette mulig med en query eller SP
Jeg har ikke testet dette, men prøv noget i retning af
SELECT A.Type, A.Dato, A.[Vand%]
FROM Testresultat A
INNER JOIN
(SELECT B.Type, max(B.Dato) AS MaxDato
FROM Testresultat B
GROUP BY B.Type)
ON A.Type = B.Type AND A.Dato = MaxDato
Jeg vil ikke sætte min hals på at syntaksen er korrekt,
men princippet er at du i en subquery finder ud af hvilke
Type/Dato kombinationer der er interessante, og derefter
udtrækker dem med et join.
| |
Kim Hansen (10-10-2003)
| Kommentar Fra : Kim Hansen |
Dato : 10-10-03 13:46 |
|
"Peter Larsen" <snulle10@c.dk> writes:
> Mit problem er at der kan være flere af samme type men med forskellige
> datoer. ex.
>
> Type Dato Vand%
> 2 10-11-2000 54,4
> 3 09-03-1999 53,2
> 3 23-09-1999 55,0
> 3 30-11-2001 54,6
> 4 12-10-2001 52,3
> 4 29-03-2002 56,2
> 5 12-12-2000 51,6
>
> Jeg ønsker følgene:
> 2 10-11-2000 54,4
> 3 30-11-2001 54,6
> 4 29-03-2002 56,2
> 5 12-12-2000 51,6
>
> Altså 1 af hver type med den nyeste dato.
Jeg bruger selv samme princip i nogen tabeller jeg har i en PostgreSQL
database, det giver jo en god mulighed for at gå tilbage og kigge i
gamle data.
Jeg har prøvet den metode som Ole Nielsby beskrev, men den var alt for
langsom når der først kom meget data i databasen. Jeg gik derfor over
til noget ikke-standard-SQL, det var heldigvis ret nemt at skifte da
jeg havde brugt et view.
I PostgreSQL kan man gøre:
SELECT DESTINCT ON (type) type, dato, vand
FROM tabel
ORDER BY type, dato DESC
DESTINCT ON (felt1, felt2, ...) udvælger første række af hvert unikt
sæt (felt1, ...), derfor skal disse felter optræde først i ORDER BY. I
det eksempel jeg har skrevet sorteres derfor efter type for at få
DESTINCT ON til at virke, og efter dato så der vælges det nyeste data.
Måske kan man gøre noget tilsvarende i MSSQL.
Princippet med at man ikke sletter data, men overskriver med nyt må
findes mange steder, er der en standard måde at gøre det på?
--
Kim Hansen | |\ _,,,---,,_ | Det er ikke
Dalslandsgade 8, A708 | /,`.-´` -. ;:-. | Jeopardy.
2300 København S | |,4- ) )-,_. ,\ ( `'-' | Svar _efter_
Tlf: 32 88 60 86 | '---''(_/--' `-'\_) | spørgsmålet.
| |
|
|