gpt4 book ai didi

SQL 增量值取决于其他列的变化

转载 作者:行者123 更新时间:2023-12-03 02:55:23 25 4
gpt4 key购买 nike

类似于:T-SQL incrementing counter based on change in a column value

我有这张表:

ID  |  VALUE
5 | A
6 | A
6 | A
6 | B
6 | A
6 | B
6 | B
6 | A
6 | C

期望的结果是这样的:

ID  |  VALUE    | GROUP
5 | A | 1
6 | A | 2
6 | A | 2
6 | B | 3
6 | A | 4
6 | B | 4
6 | B | 4
6 | A | 5
6 | C | 6

新列 (GROUP),其值每次前两列更改时都会递增,但当前两列值与上一行相同时不会递增。

到目前为止,使用 RANK OVER() 函数,我能实现的最好效果是:

ID  |  VALUE    | GROUP
5 | A | 1
6 | A | 2
6 | A | 2
6 | B | 3
6 | A | 2
6 | B | 3
6 | B | 3
6 | A | 1
6 | C | 4

最佳答案

让我假设您有一个名为 ordering 的列,它指定记录的排序。 SQL 表表示无序集,因此行没有“自然”排序。

您可以通过行号的差异以及一些额外的操作来完成您想要的操作:

select id, value, dense_rank() over (order by grp) as grouping
from (select t.*,
min(ordering) over (partition by id, value, seqnum - seqnum_iv) as grp
from (select t.*,
row_number() over (order by ordering) as seqnum,
row_number() over (partition by id, value order by ordering) as seqnum_iv
from t
) t
) t;

最里面的子查询计算值序列。我鼓励您查看结果以了解发生了什么。对于每个“岛屿”来说,差异都是恒定的。

第二个获取每个组的 ordering 值的最小值。然后可以使用它来分配顺序值作为最终结果。

关于SQL 增量值取决于其他列的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38292723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com