[SQL] rijen met max waarde uit andere tabel?

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

  • codemann
  • Registratie: Oktober 2002
  • Laatst online: 03-05 10:49
Heel eenvoudig voorgesteld, ik heb 2 tabellen in een MS-SQL database :

Tabel A :

CustIDVeldADatum
1waarde12005-03-15
2waarde22005-03-10
2waarde32005-03-15


Tabel B :

CustIDVeldB
1...
2...


Nu moet ik een lijst van klanten opvragen met telkens de inhoud van VeldA, maar dit voor de laatste datum. Ik weet dat ik dit vroeger nog gedaan heb, maar ik weet niet meer hoe :|

Kan iemand me even op weg helpen hier ? Alvast bedankt ! Ik heb zitten zoeken via google en de search maar aangezien ik niet meer weet hoe ik het deed is het wat zoeken naar een speld in een hooiberg...

[ Voor 3% gewijzigd door codemann op 15-03-2005 19:35 ]


  • Andre-85
  • Registratie: April 2003
  • Niet online

Andre-85

Sid

Ik weet niet helemaal zeker of ik begrijp wat je bedoelt, maar kan je niet zoiets doen:
code:
1
SELECT * FROM TabelA ORDER BY Datum ASC LIMIT 1;

Lorem
Whenever we feel the need to comment something, we write a method instead. - Martin Fowler
People who think they know everything really annoy those of us who know we don't - Bjarne Stroustrup


  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 22:15
Wat heeft Tabel B er nu mee te maken? Wil je hier de resultaten van je query in opslaan?

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


  • codemann
  • Registratie: Oktober 2002
  • Laatst online: 03-05 10:49
Mijn excuses, mijn uitleg is onvolledig. Ik toon maar een deel van de tabellen, het zijn een aantal tabellen die ik JOIN om de nodige velden te verkrijgen. Twee van deze tabellen (de belangrijkste) had ik afgebeeld.

Het de bedoeling is dus een JOIN te doen, bijvoorbeeld :

code:
1
2
3
SELECT TabelA.VeldA, TabelB.VeldB
FROM TabelA 
INNER JOIN TabelB ON TabelA.CustID = TabelB.CustID


Maar dan krijg ik voor CustID 2 dus 2 records, namelijk die waar VeldA waarde2 heeft en die die waar VeldA waarde3 heeft.
Ik moet enkel degene hebben met de meest recente datum...

  • mylar
  • Registratie: Mei 2002
  • Laatst online: 06-05 12:05
code:
1
2
3
4
5
6
SELECT TabelA.VeldA, TabelB.VeldB
FROM TabelA 
INNER JOIN TabelB ON TabelA.CustID = TabelB.CustID
INNER JOIN 
    (select CustID, max(Datum) as Datum from TabelA group by CustID) as DerivedTable 
ON TabelA.CustID = DerivedTable.CustID


Als ik het goed versta is je CustID het id van je klant, en komt dit meer dan eens voor in TabelA. Zoniet moet je de group by maar doen met de echter ID van de klant. Vind je die Id pas na een join, zet dan die query als "DerivedTable" met natuurlijk nog altijd max(Datum) en de group by CustID.