Pergunta

Eu preciso para obter um conjunto de registros distintos para uma mesa junto com a data máxima em todos os duplciates.

ex:

Select distinct a,b,c, Max(OrderDate) as maxDate
From ABC
Group By a,b,c

A questão é que eu obter uma volta registro para cada data diferente.

Ex:

aaa, bbb, ccc, Jan 1 2009
aaa, bbb, ccc, Jan 28 2009

Como posso limitar isso para eu acabar com apenas:

aaa, bbb, ccc Jan 28 2009

Eu assumo a questão é a gorup por e distinta não se dando bem.

EDIT:. Encontrado o problema que estava causando o problema, os resultados da consulta foram como esperado, não como acima

Foi útil?

Solução

Algo está errado ou com sua consulta ou com seus exemplos de resultados, como o que você descreve não deveria ser possível. Como sobre alguns resultados SQL e reais reais?

Em qualquer caso, você não precisa distinct lá desde tudo o que você está selecionando são as suas três colunas agrupadas um um agregado, então você vai por fim definição acima com todas as linhas distintas. Eu nunca tentei isso, então talvez haja alguma mau comportamento ao usar ambos. Você já tentou remover o distinct? O que o levou para colocá-lo lá?

Outras dicas

WITH q AS (
        SELECT  abc.*, ROW_NUMBER() OVER (PARTITION BY a, b, c ORDER BY orderDate DESC) AS rn
        FROM    abc
        )
SELECT  *
FROM    q
WHERE   rn = 1

Ter um índice em (a, b, c, orderDate) (nesta ordem) irá melhorar significativamente esta consulta.

Se você executar esta consulta:

select 'ab' as Col1, 'bc' as col2, 'cd' as col3, getdate() as Date
into #temp
insert into #temp
values ('ab','bc','cd','1/15/09')
insert into #temp
values ('aa','bb','cc','1/1/09')
insert into #temp
values ('aa','bb','cc','1/22/09')

select col1,col2,col3,max(date)
from #temp
group by col1,col2,col3

Você deve voltar:

aa, bb, cc, 2009-01-22 00: 00: 00.000
ab, bc, cd, 2009-04-30 09: 23: 07,090

A sua consulta vai funcionar tão bem assim que algo está realmente errado ou você não comunicaram corretamente a natureza exata de seu código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top