Question

Je dois obtenir un ensemble d'enregistrements distincts pour une table ainsi que la date maximale pour tous les doublons.

ex:

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

Le problème est que je reçois un enregistrement pour chaque date différente.

Ex:

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

Comment puis-je limiter cela afin de me retrouver avec seulement:

aaa, bbb, ccc Jan 28 2009

Je suppose que le problème est le problème principal et distinct ne s'entend pas bien.

EDIT: le problème à l'origine du problème a été trouvé, les résultats de la requête étaient conformes aux attentes, pas à ceux décrits ci-dessus.

Était-ce utile?

La solution

Quelque chose ne va pas avec votre requête ou avec vos résultats d'exemple, car ce que vous décrivez ne devrait pas être possible. Que diriez-vous de SQL et des résultats réels?

Dans tous les cas, vous n'avez pas besoin de distinct , car vous ne sélectionnez que vos trois colonnes groupées et un agrégat, vous définissez donc par définition toutes les lignes distinctes. Je n'ai jamais essayé cela, alors peut-être qu'il y a un problème de comportement lorsque vous utilisez les deux. Avez-vous essayé de supprimer le distinct ? Qu'est-ce qui vous a amené à le mettre là?

Autres conseils

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

Avoir un index sur (a, b, c, orderDate) (dans cet ordre) améliorera grandement cette requête.

Si vous exécutez cette requête:

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

Vous devriez revenir en arrière:

  

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

Votre requête fonctionnera aussi, donc quelque chose ne va vraiment pas ou vous n'avez pas correctement communiqué la nature exacte de votre code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top