Je dois sélectionner l'logging supérieur avec la valeur maximale pour un groupe d'autres colonnes. Dans les exemples de données ci-dessous, je dois sélectionner l'logging supérieur avec le maximum de 'Weightage' pour chaque groupe de 'id', 'ItemType'
create table sampleTable(id int, ItemType varchar(10), ItemCode varchar(10), Weightage int) insert into sampleTable values(1, 'A','aaa',2) insert into sampleTable values(1, 'A','bbb',3) insert into sampleTable values(1, 'A','ccc',3) insert into sampleTable values(1, 'B','ddd',1) insert into sampleTable values(1, 'B','eee',2) insert into sampleTable values(2, 'A','aaa',1)
La production attendue devrait être
id ItemType ItemCode -------------------------------- 1 A bbb 1 B eee 2 A aaa
J'ai essayé comme suit
SELECT top 1 id, ItemType,ItemCode FROM sampleTable WITH(NOLOCK) GROUP BY id,ItemType,ItemCode,Weightage ORDER BY Weightage desc
Mais ce n'est pas donner le résultat attendu. Merci
Voici une façon d'utiliser ROW_NUMBER
SELECT TOP 1 WITH ties id, itemtype, itemcode FROM sampletable WITH(nolock) GROUP BY id, itemtype, itemcode, weightage ORDER BY Row_number()OVER(partition BY id, itemtype ORDER BY weightage DESC)
TOP 1 with TIES
returnnera les loggings avec Tie en fonction de l' Order by
J'espère que vous connaissez la signification de l'utilisation de WITH(NOLOCK)
hint . Il va aussi tirer des données non validées
Voici une option utilisant row_number()
:
select * from ( select *, row_number() over (partition by id, itemtype order by Weightage desc) rn from sampletable ) t where rn = 1