Dies ist ein Lücke und Inseln Stil Problem. Ohne Probendaten oder gewünschte Ergebnisse ...
Verwendung von zwei row_number()
Gruppen zu identifizieren, indem Rücksetz-Flag und ein anderer in der äußeren Abfrage der Zeilen von ResetFlag
und dem grp
in der inneren Abfrage erstellt nummerieren.
Ändern Sie die Reihenfolge von date, Account, Side, Symbol, Currency
in die Reihenfolge der Spalten, in denen die Zeilen nummeriert werden sollen. Halten Sie sie in der gleichen Reihenfolge für jede der drei row_number()
s.
/* ----- */
select
date
, Account
, Side
, Symbol
, Currency
, ResetFlag
, rn = case when ResetFlag = 0 then 0
else row_number() over (
partition by ResetFlag, grp
order by date, Account, Side, Symbol, Currency)
end
from (
select *
, grp = row_number() over (order by date, Account, Side, Symbol, Currency)
- row_number() over (
partition by ResetFlag
order by date, Account, Side, Symbol, Currency)
from t
) s
order by date, Account, Side, Symbol, Currency
rextester Demo: http://rextester.com/VLCO32635
kehrt:
+------------+---------+------+--------+----------+-----------+----+
| date | Account | Side | Symbol | Currency | ResetFlag | rn |
+------------+---------+------+--------+----------+-----------+----+
| 2017-01-01 | 7 | 2 | 3 | 7,0000 | 1 | 1 |
| 2017-01-02 | 8 | 9 | 9 | 6,0000 | 1 | 2 |
| 2017-01-03 | 4 | 1 | 5 | 6,0000 | 1 | 3 |
| 2017-01-04 | 5 | 4 | 8 | 5,0000 | 0 | 0 |
| 2017-01-05 | 2 | 1 | 3 | 1,0000 | 1 | 1 |
| 2017-01-06 | 8 | 0 | 2 | 0,0000 | 0 | 0 |
| 2017-01-07 | 0 | 3 | 8 | 9,0000 | 1 | 1 |
| 2017-01-08 | 0 | 3 | 1 | 3,0000 | 1 | 2 |
+------------+---------+------+--------+----------+-----------+----+
Vielen Dank! Das funktioniert aber, wenn Sie mir erklären können, was Grp macht, das wäre sehr hilfreich –
@NewbieCoder 'grp' ist eine eindeutige Nummer für jede logische Gruppe, die mit zwei laufenden Zahlen (' row_number() ') berechnet wird. Beide teilen die gleiche 'order by', aber mit unterschiedlichen Partitionen (in diesem Fall eine ohne Partition und eine mit einer Partition). Dies könnte die Dinge ein wenig klarer machen: http://rexttester.com/KFJHA53489 – SqlZim
Vielen Dank !! –