Voici l'exemple des données:
ID Value NumPeriod ------------------------ 1681642 596.8 2 1681642 596.8 3 1681663 445.4 2 1681663 445.4 3 1681688 461.9 3 1681707 282.2 3 1681724 407.1 3 1681743 467 2 1681743 467 3 1681767 502 3
Je veux regrouper par le [ID] et prendre seulement les valeurs distinctes de [Valeur] dans chaque groupe et prendre la "première" distincte [Valeur] selon [NumPeriod]. Donc, le résultat devrait ressembler à ceci:
ID Value NumPeriod ------------------------- 1681642 596.8 2 1681663 445.4 2 1681688 461.9 3 1681707 282.2 3 1681724 407.1 3 1681743 467 2 1681767 502 3
Donc, je pensais que quelque chose comme ça fonctionnerait, mais pas de chance:
select ID, distinct(Value), NumPeriod from MyTable group by ID, Value, NumPeriod order by ID, NumPeriod
Toute aide serait appréciée. Merci!
Vous pouvez utiliser une fonction de classment et un CTE:
WITH CTE AS ( SELECT ID, Value, NumPeriod, RN = ROW_NUMBER() OVER (PARTITION BY ID ORDER BY NumPeriod ASC) FROM MyTable ) SELECT ID, Value, NumPeriod FROM CTE WHERE RN = 1 ORDER BY ID, Value
Je pense que tout ce que vous devez changer est ce que vous appelez distinct. Essaye ça:
select distinct ID, Value, NumPeriod from MyTable group by ID, Value, NumPeriod order by ID, NumPeriod