Row_number sur la partition et trouvez la valeur max rn

J'ai commencé à partir du tableau suivant:

+---+-----+---------+----------+----------+-------------+ | 1 | ID | OrderNO | PartCode | Quantity | DateEntered | | 2 | 417 | 2144 | 44917 | 100 | 40773 | | 3 | 418 | 7235 | 11762 | 5 | 40773 | | 4 | 419 | 9999 | 60657 | 100 | 40773 | | 5 | 420 | 9999 | 60657 | 90 | 40774 | +---+-----+---------+----------+----------+-------------+ 

pour ça:

 +---+---------+----------+----------+-------------+----+ | 1 | OrderNO | PartCode | Quantity | DateEntered | rn | | 2 | 2144 | 44917 | 100 | 40773 | 1 | | 3 | 7235 | 11762 | 5 | 40773 | 1 | | 4 | 9999 | 60657 | 100 | 40773 | 1 | | 5 | 9999 | 60657 | 90 | 40774 | 2 | +---+---------+----------+----------+-------------+----+ 

en utilisant la requête pour cette réponse .

 select OrderNO,PartCode,Quantity,row_number() over(partition by OrderNO order by DateEntered desc) as rn from YourTable) as T 

Maintenant, j'essaye d'append un champ "rn_max", qui est le maximum "rn" de chaque OrderNO et obtient le résultat suivant:

 +---+---------+----------+----------+-------------+----+--------+ | 1 | OrderNO | PartCode | Quantity | DateEntered | rn | rn_max | | 2 | 2144 | 44917 | 100 | 40773 | 1 | 1 | | 3 | 7235 | 11762 | 5 | 40773 | 1 | 1 | | 4 | 9999 | 60657 | 100 | 40773 | 1 | 2 | | 5 | 9999 | 60657 | 90 | 40774 | 2 | 2 | +---+---------+----------+----------+-------------+----+--------+ 

Je pourrais get ce résultat en calculant le maximum de chaque OrderNO avec la requête

 SELECT OrderNO,MAX(rn) AS 'rn_max' FROM ( select OrderNO,PartCode,Quantity,row_number() over(partition by OrderNO order by DateEntered desc) as rn from YourTable ) T Group by OrderNO 

puis utilisez une jointure à gauche de YourTable. Y a-t-il un moyen le plus court de countr les lignes avec le même OderNo? J'ai essayé d'append row_number() over(partition by OrderNO) as rn_max à la requête mais j'ai besoin d'écrire une clause order by.

Utilisez la fonction de window max .

 SELECT T.*,MAX(rn) OVER(PARTITION BY OrderNo) AS 'rn_max' FROM ( select OrderNO,PartCode,Quantity,row_number() over(partition by OrderNO order by DateEntered desc) as rn from YourTable ) T 

tu peux essayer ça. Fondamentalement, vous utiliseriez l'agrégation max () sur les lignes partitionnées pour get le rn_max

 select *, max(rn) over(partition by OrderNO) as rn_max FROM ( select OrderNO,PartCode,Quantity,row_number() over(partition by OrderNO order by DateEntered desc) as rn from YourTable ) T