2017-08-30 1 views
1

I aus der folgenden Tabelle gestartet:ROW_NUMBER über Partition und finden Sie den max rn Wert

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

dazu:

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

die Abfrage fo diese answer verwenden.

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

Jetzt versuche ich, ein Feld „rn_max“ hinzufügen, shich ist der max „rn“ jedes OrderNo und erhalten folgendes Ergebnis:

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

ich dieses Ergebnis der Berechnung erhalten könnte max von jeder BestellungNO mit der Abfrage

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 

und dann eine linke Verknüpfung von YourTable verwenden. Gibt es einen kürzesten Weg, um die Zeilen mit der gleichen OderNummer zu zählen? Ich habe versucht, row_number() over(partition by OrderNO) as rn_max bei der Abfrage hinzuzufügen, aber ich muss eine Order-by-Klausel schreiben.

+1

Looks zu erhalten, wie Sie besser dran COUNT verwenden würde (*) OVER (PARTITION BY OrderNo) –

Antwort

1

Verwenden Sie max Fensterfunktion.

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

Dies wird Fehler geben. – DhruvJoshi

+0

Entschuldigung vergessen, "Gruppe von" aus der Abfrage von op zu entfernen. –

1

können Sie dies versuchen. Grundsätzlich würden Sie max() Aggregation über die aufgeteilten Zeilen verwenden, um den 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 
Verwandte Themen