Pergunta

I necessário criar uma consulta que grupos por duas colunas e retorna uma coluna adicional com base numa condição.

Por exemplo, digamos que eu tenho as seguintes colunas:

ProductCode | SerialNumber | Quantidade | DatePurchased | Cliente

e a tabela contém combinações duplicadas de ProductCode e SerialNumber com diferentes Quanitites e compra de datas. Eu gostaria de devolver o ProductCode, SerialNumber ea quantidade para a linha com maior valor (mais recente) para DatePurchased. Para complicar ainda mais as coisas isso deve ser feito para todas as linhas onde CustomerID = 'xxx'.

Todas as ideias ???

Qualquer ajuda apreciado. Felicidades.

Foi útil?

Solução

Assumindo DatePurchased única:

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'

Outras dicas

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top