2009-05-12 10 views
1

J'ai besoin de créer une requête qui se regroupe par deux colonnes et renvoie une colonne supplémentaire basée sur une condition.renvoyer des lignes partiellement distinctes/uniques

Par exemple, supposons que j'ai les colonnes suivantes:

ProductCode | SerialNumber | Quantité | Date d'achat | CustomerID

et la table contient des combinaisons dupliquées de ProductCode et SerialNumber avec des Quanitites et des dates d'achat différents. Je voudrais retourner le ProductCode, SerialNumber et la quantité pour la ligne avec la plus grande valeur (la plus récente) pour DatePurchased. Pour compliquer davantage les choses, cela doit être fait pour toutes les lignes où CustomerID = 'xxx'.

Des idées ???

Toute aide appréciée. À la vôtre.

+0

plate-forme de base de données? SQL Server - MySQL - PostgreSQL - Oracle - autre? (Certaines Frankendatabase combinant tout le lot?) – araqnid

Répondre

1

DatePurchased uniques: En supposant

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

merci Marc, a parfaitement fonctionné. – 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 
Questions connexes