【发布时间】:2019-08-27 06:55:11
【问题描述】:
如何在另一列上添加带有某些条件的增量值(不是汇总)?
我正在使用类似 Oracle 的 DBMS,名为 Tibero,例如我想生成这些数据
ROWNUM GRP_STRT GRP_NO SLBY
1 1 1 1
2 1 1 1
3 1 1 1
4 1 1 1
5 1 1 1
6 1 2 0
7 1 2 0
8 1 3 1
9 1 3 1
10 1 3 1
11 1 4 0
12 1 5 1
SLBY 列是买/卖代码(0=Buy,1=Sell),然后是每一种变化的交易类型,GRP_NO 列增加(但它不按 SLBY 列分组)
SELECT CASE
WHEN ROWNUM = 1 THEN GRP_NO
WHEN ROWNUM <> 1 AND SLBY = LAG(SLBY,1) over (ORDER BY ROWNUM) THEN LAG(GRP_STRT,1) over (ORDER BY ROWNUM) - 1
WHEN ROWNUM <> 1 AND SLBY_DSTN_CD <> LAG(SLBY_DSTN_CD,1) over (ORDER BY ROWNUM) THEN LAG(GRP_STRT,1) over (ORDER BY ROWNUM) + 1
END TARGET_GROUPING
, A.*
FROM SOME_TABLE
我尝试使用该查询,但没有像上图那样得到我想要的,而是生成了一个 GRP_NO,例如 1 1 1 1 1 2 1 1 1 1 2 1 1 1(仅限第一次更改 SLBY)
抱歉我的英语不好和不好的解释,如果需要更多信息,我会解释更多,谢谢你的帮助!
【问题讨论】:
-
预期输出和实际输出会有帮助
-
预期输出如附图,实际输出低于查询
-
请不要图片。我什至无法打开图像。您能否将预期的输出粘贴到您的问题中?
-
你有 rownum、grp_start 和 slby 列,你想输出 group_no 列,对吗?
-
您似乎没有指定行顺序的列。 SQL 表代表 无序 集。
rownum是Oracle内置的伪列,所以不算。
标签: sql oracle window-functions lag