我正在为我的应用程序使用MSSQL
,我需要计算序列号状态的前一行。
表就是这样,
+------+------+
|Number|Status|
| 1| N|
| 2| G|
| 3| G|
| 4| N|
| 5| N|
| 6| G|
| 7| G|
| 8| N|
+------+------+
我想结果集如下 恩。
+------+------+-----+
|Number|Status|Count|
| 1| N| 1 |
| 2| G| 1 |
| 3| G| 2 |
| 4| N| 1 |
| 5| N| 2 |
| 6| G| 1 |
| 7| G| 2 |
| 8| G| 3 |
+------+------+-----+
我无法使用游标来提高查询性能。这是最糟糕的选择....
答案 0 :(得分:2)
您需要识别连续的" N"和" G"值。我喜欢用行号来区分这个。然后,您可以使用row_number()
枚举行:
select t.number, t.status,
row_number() over (partition by status, grp order by number) as seqnum
from (select t.*,
(row_number() over (order by number) -
row_number() over (partition by status order by number
) as grp
from table t
) t;