Toon posts:

[SQL] SELECT de code met de hoogste record

Pagina: 1
Acties:
  • 179 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
AI de topictitel moet zijn [SQL] SELECT de code met de hoogste datum Nog een OP die dit ff wil wijzigen? Thnx


Middels onderstaande query krijg ik een bepaalde output:

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT e.code, e.datum, g.groepcode
FROM eetsoort e
INNER JOIN eetgroep g ON e.groepcode = g.groepcode
WHERE g.groepcode='400' 
ORDER BY e.code, e.datum


==OUTPUT==========================
CODE    DATUM                     GROEPCODE
410 2003-01-01 00:00:00.000   400
420 2003-01-01 00:00:00.000   400
430 2003-01-01 00:00:00.000   400
430 2003-02-02 00:00:00.000   400
440 2003-01-01 00:00:00.000   400
440 2003-02-02 00:00:00.000   400
440 2003-03-03 00:00:00.000   400


Ik wil dat elke code maar 1 maal voorkomt en wel degene met de LAATSTE DATUM.

(Let op: CODE is niet het ID van een record. Ik wil niet bijv het hoogste id pakken van een code en die selecteren, zoals ik als methode heb gevonden in de search

Het hoeft bij mij nml. helemaal niet zo te zijn dat het nieuwste id de meest recente datum heeft dus...)

Ik heb al flink geklooid en gezocht, maar mocht niet baten. 'Max(Datum)' moet ik op 1 of andere manier zien te gebruiken en dan per code. Moet ik in een subquery zien te verwerken volgens mij.

Maar hoe? Nog een coole SQL-goeroe die dit er ff uitklopt? Of mij iig op weg wil helpen
;)

[ Voor 9% gewijzigd door Verwijderd op 25-09-2003 14:26 ]


Verwijderd

MAX(datum)

edit:
te snel gelezen.... zal ff kijken voor een beter antwoord..

[ Voor 80% gewijzigd door Verwijderd op 25-09-2003 14:26 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Kijk eens in de eerste de beste SQL tutorial naar de aggregated functions en de group by clausule.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Verwijderd schreef op 25 September 2003 @ 14:26:
MAX(datum)

edit:
te snel gelezen.... zal ff kijken voor een beter antwoord..
Sooterd.. lees mijn post eens helemaal ;)

Te snel geantwoord :D

WhoAmI, heb ik naar gekeken... heb hier een heel dik boek van acadamic service over SQL, maar die group by icm. max(datum)... kan daar niet uitkomen...

[ Voor 30% gewijzigd door Verwijderd op 25-09-2003 14:30 ]


Verwijderd

Zoiets???
SQL:
1
2
3
4
5
SELECT e.code, MAX(e.datum), g.groepcode
FROM eetsoort e
INNER JOIN eetgroep g ON e.groepcode = g.groepcode
WHERE g.groepcode='400'
GROUP BY e.code

Verwijderd

Topicstarter
Verwijderd schreef op 25 September 2003 @ 14:29:
Zoiets???
SQL:
1
2
3
4
5
SELECT e.code, MAX(e.datum), g.groepcode
FROM eetsoort e
INNER JOIN eetgroep g ON e.groepcode = g.groepcode
WHERE g.groepcode='400'
GROUP BY e.code
Nope

Server: Msg 8120, Level 16, State 1, Line 1
Column 'g.groepcode' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Als ik eerst de max(datum) doe, heb ik maar 1 record geselecteerd en dan wil ik groeperen.. (das ongeveer de volgorde toch die logischerwijs doorlopen wordt?)

[ Voor 17% gewijzigd door Verwijderd op 25-09-2003 14:32 ]


  • Malebolgia
  • Registratie: Februari 2002
  • Laatst online: 25-05 22:54

Malebolgia

Move, or be moved

code:
1
2
3
4
5
SELECT e.code, MAX(e.datum), g.groepcode
FROM eetsoort e
INNER JOIN eetgroep g ON e.groepcode = g.groepcode
WHERE g.groepcode='400'
GROUP BY e.code, g.groepcode
Als ik eerst de max(datum) doe, heb ik maar 1 record geselecteerd en dan wil ik groeperen.. (das ongeveer de volgorde toch die logischerwijs doorlopen wordt?)
EERST groeperen, dan per groep een MAX/MIN/SUM uitvoeren

...anders DL/koop je ff een sql-boek ofzo... :|

[ Voor 38% gewijzigd door Malebolgia op 25-09-2003 14:35 ]

"People should know when they're conquered..."


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
In je group by clausule moet je alle velden opnemen die in je select-list staan en geen aggregated functie zijn.

code:
1
2
3
4
select code, groepcode, max(datum)
from ....
...
group by code, groepcode

https://fgheysels.github.io/


Verwijderd

Topicstarter
owja ok hij doet't

Volgens mij zat ik weer eens veel te moeilijk te denken...

Thanks iig!


hij doet t niet, maar denk ik een foutje in mn vraagstelling...

als ik bijv de volgende query maak:
SQL:
1
2
3
4
5
SELECT e.code, e.naam, MAX(e.datum), g.groepcode
FROM eetsoort e
INNER JOIN eetgroep g ON e.groepcode = g.groepcode
WHERE g.groepcode='400'
GROUP BY e.code, e.naam, g.groepcode


krijg ik een paar x over dezelfde code terug en das nie de bedoeling

[ Voor 74% gewijzigd door Verwijderd op 25-09-2003 14:57 ]


Verwijderd

Stomme fout van mij ja....

Verwijderd

Dit zijn van die typische queries die je in geen enkel boek tegenkomt. Ik spreek uit ervaring. Je zult een omweggetje moeten gebruiken, nl.:

code:
1
2
3
4
5
SELECT *
FROM eetsoort e
INNER JOIN eetgroep g ON e.groepcode = g.groepcode
WHERE g.groepcode='400' AND
    e.code in (SELECT code FROM (SELECT code, MAX(datum) FROM eetsoort GROUP BY code)


Zou moeten werken

:7

offtopic:
Ik zat dus ook weer veel te ver te denken. MAAR, dit werkt uitstekend als je meerdere velden wilt selecteren die niet met een aggregate op te nemen zijn.

[ Voor 27% gewijzigd door Verwijderd op 25-09-2003 14:47 ]


Verwijderd

Topicstarter
Verwijderd schreef op 25 september 2003 @ 14:39:
Dit zijn van die typische queries die je in geen enkel boek tegenkomt. Ik spreek uit ervaring. Je zult een omweggetje moeten gebruiken, nl.:

code:
1
2
3
4
5
6
7
8
SELECT *
FROM eetsoort e
INNER JOIN eetgroep g ON e.groepcode = g.groepcode
WHERE g.groepcode='400' AND
    e.code in (SELECT code
                     FROM (SELECT code, MAX(datum) 
                                FROM eetsoort 
                                GROUP BY code)
SQL:
1
2
3
SELECT code
FROM (SELECT code, MAX(datum) 
           FROM eetsoort GROUP BY code)
Daar gaat t al fout...

[ Voor 14% gewijzigd door Verwijderd op 25-09-2003 15:07 ]


  • Poiter
  • Registratie: Juli 2001
  • Laatst online: 20-02 14:54
SELECT DISTINCT e.code, e.datum, g.groepcode
FROM eetsoort e
INNER JOIN eetgroep g ON e.groepcode = g.groepcode
WHERE g.groepcode='400' AND e.datum = (select max(ee.datum) from eetsoort ee
WHERE ee.code = e.code AND ee.groepcode = e.groepcode)


Welke database gebruik je? Hoop dat die dit eet....

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Wat is de exacte resultaat van de volgende query?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT 
  e.code, 
  max(e.datum), 
  g.groepcode
FROM 
  eetsoort e, 
  eetgroep g
WHERE
  e.groepcode = g.groepcode
AND
  g.groepcode='400' 
GROUP BY 
  e.code, 
  g.groepcode

[ Voor 5% gewijzigd door dusty op 25-09-2003 17:47 ]

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Topicstarter
dusty schreef op 25 september 2003 @ 17:46:
Wat is de exacte resultaat van de volgende query?
...
SQL:
1
2
3
4
5
CODE    DATUM                     GROEPCODE
410 2003-01-01 00:00:00.000   400
420 2003-01-01 00:00:00.000   400
430 2003-02-02 00:00:00.000   400
440 2003-03-03 00:00:00.000   400


Deze doet t dus wel, maar is te beperkend door het 'GROUP BY'-element. Wanneer ik bijvoorbeeld e.naam ook in de selectie wil displayen gaat dit niet, ik moet deze nml. ook in de group-by zetten, aangezien naam niet aggregated is. Een code die vaker voorkomt heeft verschillende namen, hierdoor krijg ik dus weer meer dan 1 maal dezelfde code.
Poiter schreef op 25 September 2003 @ 17:12:
SELECT DISTINCT e.code, e.datum, g.groepcode
FROM eetsoort e
INNER JOIN eetgroep g ON e.groepcode = g.groepcode
WHERE g.groepcode='400' AND e.datum = (select max(ee.datum) from eetsoort ee
WHERE ee.code = e.code AND ee.groepcode = e.groepcode)


Welke database gebruik je? Hoop dat die dit eet....
msSQLserver 2000, dat eet ie wel ;) en idd... dizze lijkt goed te werken.
Thanks :)

[ Voor 24% gewijzigd door Verwijderd op 26-09-2003 10:11 ]

Pagina: 1