Pregunta

Es necesario crear una consulta que agrupa por dos columnas y devuelve una columna adicional en base a una condición.

Por ejemplo, digamos que tengo las siguientes columnas:

CódigoProducto | SerialNumber | Cantidad | DatePurchased | CustomerID

y la tabla contiene combinaciones duplicadas de CódigoProducto y SerialNumber con diferentes Quanitites y fechas de compra. Me gustaría volver el código de producto, SerialNumber y la cantidad para la fila con mayor valor (más reciente) para DatePurchased. Para complicar más las cosas que deberá hacerse para todas las filas donde CustomerID = 'xxx'.

¿Ideas ???

Cualquier ayuda apreciada. Saludos.

¿Fue útil?

Solución

Suponiendo única 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'

Otros consejos

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top