Pau*_*aul 4 sql-server sql-server-2012
所以我有一个表tbl,我试图在其中提取以可变速率递增的数据。我需要确定数据何时重置,以便我可以得出一个累积值。这是一个示例表:
ID VAL
1 12
2 2
3 14
4 20
5 24
6 25
7 2
8 11
9 14
10 15
11 18
12 0
13 5
Run Code Online (Sandbox Code Playgroud)
如何在 SQL 查询中识别哪些行已重置数据?
在此表示例中,我想将行 ID 2、7 和 12 标识为数据重置的点。
最终结果是,我可以将第 1、6 和 11 行(以及其他数据)添加到当前值以获得总累积值。
;WITH x AS
(
SELECT ID, VAL, Prev_VAL = LAG(VAL, 1) OVER (ORDER BY ID)
FROM dbo.your_table
)
SELECT ID, VAL, Prev_VAL, Cumulative = VAL + Prev_VAL
FROM x
WHERE VAL < Prev_VAL
ORDER BY ID;
Run Code Online (Sandbox Code Playgroud)
如果您需要支持早于 SQL Server 2012(LAG()引入时)的版本,您可以这样做,但通过随意且几乎不科学的观察,它的成本约为 4 倍:
;WITH x AS
(
SELECT ID, VAL, Prev_ID = ROW_NUMBER() OVER (ORDER BY ID)
FROM dbo.your_table
)
SELECT c.ID, c.VAL, p.VAL, Cumulative = c.VAL + p.VAL
FROM x AS c
LEFT OUTER JOIN x AS p
ON c.Prev_ID = p.Prev_ID + 1
WHERE c.VAL < p.VAL
ORDER BY c.ID;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |