2017-08-30 103 views
1

我從下表開始:使用查詢FO這個answerROW_NUMBER了分區,找到最大Rn值

+---+---------+----------+----------+-------------+----+ 
| 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 | 
+---+---------+----------+----------+-------------+----+ 

+---+-----+---------+----------+----------+-------------+ 
| 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  | 
+---+-----+---------+----------+----------+-------------+ 

了這一點。

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

現在,我想添加一個字段「rn_max」,shich是每個OrderNO的最大「RN」,並得到以下結果:

+---+---------+----------+----------+-------------+----+--------+ 
| 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  | 
+---+---------+----------+----------+-------------+----+--------+ 

我能得到這個結果計算每個訂單號的最大數量與查詢

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 

然後使用來自YourTable的左連接。 是否有最短的方法來計算具有相同的OderNo的行?我試圖在查詢中添加row_number() over(partition by OrderNO) as rn_max,但我需要編寫一個order by子句。

+1

看起來你會更好使用COUNT(*)OVER(PARTITION BY OrderNO) –

回答

1

使用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 
+0

這會給錯誤。 – DhruvJoshi

+0

對不起忘了從op的查詢中刪除'group by'。 –

1

你可以試試這個。 基本上你會使用MAX()聚集在分區的行,以獲得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