2009-05-12 5 views
1

Ich muss eine Abfrage erstellen, die nach zwei Spalten gruppiert und eine zusätzliche Spalte basierend auf einer Bedingung zurückgibt.Zurückgeben teilweise eindeutig/eindeutige Zeilen

Zum Beispiel sagen, ich habe die folgenden Spalten bekommt:

Productcode | Seriennummer | Menge | DatePurchased | CustomerID

und die Tabelle enthält doppelte Kombinationen von ProductCode und SerialNumber mit unterschiedlichen Quanitites und Kaufdaten. Ich möchte den ProductCode, die Seriennummer und die Menge für die Zeile mit dem größten (neuesten) Wert für DatePurchased zurückgeben. Um die Dinge noch komplizierter zu machen, muss dies für alle Zeilen mit CustomerID = 'xxx' gemacht werden.

Irgendwelche Ideen ???

Jede Hilfe wird geschätzt. Prost.

+0

, die Datenbank-Plattform? SQL Server - MySQL - PostgreSQL - Oracle - andere? (Einige Frankendatabase kombiniert alle die Menge?) – araqnid

Antwort

1

Unter der Annahme, einzigartige DatePurchased:

SELECT a.* 
FROM Table as a 
JOIN (
    SELECT ProductCode, SerialNumber, MAX(DatePurchased) as MaxDate 
    FROM Table 
    GROUP BY ProductCode, SerialNumber 
) as b ON 
    a.ProductCode = b.ProductCode 
    AND a.SerialNumber = b.SerialNumber 
    AND a.DatePurchased = b.MaxDate 
WHERE 
    a.CustomerID = 'xxx' 
+0

danke Mark, hat perfekt funktioniert. – andrej351

0
SELECT 
    T1.ProductCode, 
    T1.SerialNumber, 
    T1.Quantity 
FROM 
    Some_Table T1 
LEFT OUTER JOIN Some_Table T2 ON 
    T2.ProductCode = T1.ProductCode AND 
    T2.SerialNumber = T1.SerialNumber AND 
    T2.CustomerID = T1.CustomerID AND 
    T2.DatePurchased > T1.DatePurchased 
WHERE 
    T1.CustomerID = 'xxx' AND 
    T2.ProductCode IS NULL 
Verwandte Themen