retornando linhas parcialmente distintas / únicas
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.
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