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.

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top