Ich kam mit einem Problem, das einfach schien, aber ich konnte nicht die gewünschte Ausgabe erhalten. Meine Beispieldaten sind wie folgt: -Wie dichte_Rank() nach der Reihenfolge der Zeilen zu berechnen
end_date_row row_code
2010-06-30 12
2011-06-30 12
2012-06-30 12
2013-06-30 12
2014-06-30 12
2014-07-16 12
2014-12-31 18
2015-06-30 18
2015-07-06 18
2015-11-17 12
NULL 18
ich die Ausgabe wie will - ist
end_date_row row_code rn
2010-06-30 12 1
2011-06-30 12 1
2012-06-30 12 1
2013-06-30 12 1
2014-06-30 12 1
2014-07-16 12 1
2014-12-31 18 2
2015-06-30 18 2
2015-07-06 18 2
2015-11-17 12 3
NULL 18 3
Unterhalb der Code, den ich nahe gebracht, aber ich konnte immer noch nicht die genaue Ausgabe erhalten.
select end_date_row,row_code,rn1
from
(
select end_date_row,row_code,row_number() over (order by (select 1)) as rn, row_number() over (order by (select 1)) - row_number() over (partition by row_code order by (end_date_row)) as rn1
from a
) as abc
order by rn
aus dem obigen Code Meine Ausgabe ist -
end_date_row row_code rn1
2010-06-30 12 0
2011-06-30 12 0
2012-06-30 12 0
2013-06-30 12 0
2014-06-30 12 0
2014-07-16 12 0
2014-12-31 18 5
2015-06-30 18 5
2015-07-06 18 5
2015-11-17 12 3
NULL 18 10
Ich kann nicht lead/lag Funktionen verwenden, wie ich 2008r2 SQL Server verwende. Können wir eine Lösung für dieses Problem ohne rekursive Cte oder While-Schleife haben?
Wie kommt es 'rn = 3' tun? Dort wird 'row_code' geändert. Sollte es nicht "rn = 4" sein? –