/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
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.

Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408518
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste