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