2009-03-10 16 views
0

abrufen Ich habe mit dieser für eine Weile jetzt gearbeitet. So entschied ich mich zu fragen und Hilfe zu holen.Max Datensätze von sqlserver

Ich habe zwei Tabellen als solche:

tblTrans: (DocNumber field is always unique) 

DocNumber  TransDate  userId 
66-FF-GHIP  03-05-08  someUser 
55-RT-JHTP  03-09-09  someOtherUser 
77-AF-KPWT  05-08-09  userId1 
09-IO-TEAG  04-08-09  thisUser 


tblTransDet: (productIdCode field + DocNumber fields are always unique) 
DocNumber  ProductIdCode  TransStatus 
66-FF-GHIP  4124    Approved 
66-FF-GHIP  2124    Pending 
66-FF-GHIP  2340    Approved 
77-AF-KPWT  4124    Approved 
55-RT-JHTP  4124    Pending 
09-IO-TEAG  2124    Pending 

Wie Sie sehen können. ProductIdCode 4124 wiederholt sich mehrmals in tblTransDet, aber die Kombination von productIdCode und DocNumber ist immer eindeutig.

Wie kann ich docnumber und productID abrufen ... basierend auf der docNumber, die das höchste transDate hat.

Also In diesem Beispiel. das Endergebnis

77-AF-KPWT 4124 
09-IO-TEAG 2124 
66-FF-GHIP 2340 

würde ich die tablestrcuture ändern würde, wenn ich

+0

Ich verstehe es nicht - wie Sie ProductID bekommen 2340 für DoC# 66-FF-GHIP basierend auf dem Datum? Es scheint keine Beziehung zu geben ... –

+0

weil ich alle productId's von dieser Tabelle bekomme. und seit 2340 ist einzigartig ... es sollte sich zeigen. Wenn es zwei Instanzen von 2340 gäbe, dann würde der mit dem maximalen Transaktionsdatum –

+0

angezeigt werden. Ich verstehe es auch nicht. Vielleicht sollten Sie uns eine DDL Ihrer zwei Tabellen zeigen. –

Antwort

0

Sie konnte verwenden eine Unterabfrage

WHERE Detail.Date = (SELECT MAX(Date) FROM TransDet) 
1

Verwenden Sie ein corelated subquery :(könnte - das ist nicht getestet:

+0

@Neil, ich denke du solltest die Frage nochmal lesen. Mit den Daten, die das OP angegeben hat, ist es nicht möglich. –

+0

Dies bringt auch Duplikate und keine einzelnen Datenzeilen für productID und documentnumber. In diesem Fall würde dies alle Dokumentennummern enthalten, auf die productID 4124 bezogen ist. anstatt nur "77-AF-KPWT 4124" zu bringen, da diese Dokumentennummer das höchste Datum hat –

0
SELECT * 
FROM (
     SELECT d.DocNumber, d.ProductId, t.TransDate, 
     ROW_NUMBER() OVER (PARTITION BY d.DocNumber, d.ProductId ORDER BY TransDate DESC) AS rn 
     FROM tblTransDet d, tblTrans t 
     WHERE t.DocNumber = d.DocNumber 
     ) 
WHERE rn = 1