[access2003] groepeer query met maximum

Pagina: 1
Acties:

  • Witte
  • Registratie: Februari 2000
  • Laatst online: 29-01 15:02
Ik heb een tabel met daarin orders, klanten, contactpersonen en besteldatums.
Ik wil nu een query maken die per klant de meest recente contactpersoon opgeeft, dus die van de jongste besteldatum; per klant één regeltje.
Ik dacht hiervoor volgende groepeerquery te gebruiken:

code:
1
2
3
SELECT kla__ref, knp__ref, Max(besteldatum) AS besteldatum
FROM orders
GROUP BY kla__ref, knp__ref


Echter, dit geeft het verkeerde resultaat: hij geeft per order-contactpersoon-combinatie een regel, met daarin van die betreffende order-contactpersoon-combinatie de maximale besteldatum:
code:
1
2
3
4
5
6
7
8
9
10
kla__ref  knp__ref  MaxVanbesteldatum
100001    003       06-09-2006
100001    007       08-06-2006
100001    010       06-09-2006
100001    011       09-09-2006
100001    004       01-09-2006
100001    005       02-09-2006
100002    002       19-07-2007
100002    003       12-10-2006
...


terwijl ik wil zien:
code:
1
2
3
4
kla__ref  knp__ref  MaxVanbesteldatum
100001    011       09-09-2006
100002    002       19-07-2007
...


Kan dit ineens, of moet ik een sub-query maken waarin ik eerst per klant de meest recente order opspoor, en daarna pas de contactperoon erbij query?

Houdoe


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:03

Dido

heforshe

Je wilt ergens een
SQL:
1
WHERE datum = MAX(datum)

in je query hebben ;)

Wat betekent mijn avatar?


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Volgens mij werkt dat ook niet :) Dat zal dus met een subquery moeten waarbij eerst max van besteldatum per klant wordt opgehaald. Eventueel zet je die subquery in het where statement.
code:
1
2
Select * from orders as o where 
(select max(datum) from orders where orders.klant=o.klant)
en laat je in je hoofdquery de group by weg.

[ Voor 8% gewijzigd door Lustucru op 19-11-2007 12:25 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:03

Dido

heforshe

Ik zit te suffen, zie Lustucru :P

Wat betekent mijn avatar?


  • Witte
  • Registratie: Februari 2000
  • Laatst online: 29-01 15:02
Lustucru schreef op maandag 19 november 2007 @ 12:23:
Volgens mij werkt dat ook niet :) Dat zal dus met een subquery moeten waarbij eerst max van besteldatum per klant wordt opgehaald. Eventueel zet je die subquery in het where statement.
code:
1
2
Select * from orders as o where 
(select max(datum) from orders where orders.klant=o.klant)
en laat je in je hoofdquery de group by weg.
Zo heb ik het - min of meer - opgelost. (dus met een soort tussenquery)

Houdoe