retourner partiellement rangées distinctes uniques /
Question
Je dois créer une requête qui regroupe par deux colonnes et retourne une colonne supplémentaire en fonction d'une condition.
Par exemple, dire que j'ai les colonnes suivantes:
ProductCode | SerialNumber | Quantité | DatePurchased | CustomerID
et la table contient des combinaisons en double de ProductCode et SerialNumber avec différentes Quanitites et les dates d'achat. Je voudrais retourner le ProductCode, SerialNumber et la quantité de la ligne avec la plus grande (la plus récente) valeur pour DatePurchased. Pour compliquer encore les choses, cela doit être fait pour toutes les lignes où CustomerID = « xxx ».
Toutes les idées ???
Toute aide appréciée. Vive.
La solution
En supposant DatePurchased unique:
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'
Autres conseils
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