Mit ROW_NUMBER in CTE
Ich versuche für einen Allgemeinen Tabellenausdruck mit einer ROW_NUMBER-Funktion.
Abfrage:
with Demo as
(
select *, ROW_NUMBER() over (partition by GID, MID order by MMID) as ROWNUMBER from Table1 where DateEntered > '2015-06-13 00:00:00.000'
)
select * from Demo
Hier, das Ergebnis bekomme ich
GID MID ROWNUMBER
1 1 1
1 2 1
1 2 2
1 2 3
2 1 1
2 2 1
2 2 2
2 3 5
2 4 4
Nun, ich will alle Zeilen, in denen die Kombination von GID,MID, max Zeilennummer Wert. Aber eine Bedingung ist hier, dass für diese Zeilen, die Kombination von GID,MID sollte auch 1.
In einfachen Worten, bekomme ich die Zeilen mit max Zeilennummer Wert, wenn diese Kombination von gid,mid rownumber=1.
Die Ausgabe, die ich mir Wünsche ist
GID MID ROWNUMBER
1 1 1
1 2 3
2 1 1
2 2 2
Ich hoffe, ich habe es nicht geschafft-Komplex. Kann jemand pls informieren Sie mich, wie dies zu tun ?
- "hol mir die Zeilen mit max row number-Wert, wenn diese Kombination hat rownumber = 1"?, wie kann das sein, es sei denn, jede Zeile, die Nummer 1 ist?
- Im Beispiel oben gegebenen Kombination von GID,MID(e.g GID=1, MITTE =2) hat ROWNUMBER ist 1,2 3 . Hier möchte ich die Zeile mit ROWNUMBER = 3 .
partition by GID, MID order by MID
geben wollte beliebigen Reihe von zahlen, weil die Bestellung Wert wird das gleiche für jedes Element der partition.- Um von MMID. Es ist anders, als in der MITTE.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie brauchen nicht die Nummer der Zeile mit dem Wert, verwenden Sie einfach
desc
stattasc
filter:Wenn Sie wollen, eine sinnvolle
ROWNUMBER
in der Ausgabe, dann verwenden Sie zwei Berechnungen in der CTE.desc
stattasc
, wie ich schon erwähnt, in der Antwort. Dann, der maximale Wert ist eine Zeilennummer von 1, die zweitgrößte 2, und so weiter.Max von
row_number()
ist nur zählen.ROW_NUMBER() = 1
. Die erste Zeile wird 1.ROW_NUMBER
zugeordnet ist, nachdem die where-Klausel eliminiert Zeilen, in die Sie gegeben-Abfrage. Die where-Klausel nicht beseitigenROW_NUMBER()
= 1, wenn alle Zeilen eliminiert werden, in diesem Fall gibt es keine Zeile, um eine max. Noch keine Zeilen enthalten, die in meiner Zählung.Können Sie
max
wählen Sie die höchste rownumber pro mid, gid-Kombination.Sollte diese Arbeit für Sie: