提问人:Joost Oskam 提问时间:6/23/2023 最后编辑:GMBJoost Oskam 更新时间:6/23/2023 访问量:46
在一个 select 语句中按组 SQL 计算的累计数量
Cumulative number by group SQL in one select statement
问:
数据如下所示:
编号 | 日期 | 人 | 地位 |
---|---|---|---|
1 | 01012020 | 应用程序接口 | 新增功能 |
1 | 02012020 | 雷姆科 | 好 |
1 | 03012020 | 应用程序接口 | 重新计算 |
1 | 04012020 | 鲁德 | 好 |
1 | 05012020 | 应用程序接口 | 重新计算 |
1 | 06012020 | 迈克尔 | 好的,额外的信息 |
1 | 07012020 | 罗伊 | 好 |
1 | 08012020 | 罗伊 | 好 |
我必须添加一行来显示此 ID 的版本。当 API 以外的人处理 ID 后,版本会增加。
序列应以 1 开头。
因此,结果应如下所示:
编号 | 日期 | 人 | 地位 | 版本 |
---|---|---|---|---|
1 | 01012020 | 应用程序接口 | 新增功能 | 1 |
1 | 02012020 | 雷姆科 | 好 | 1 |
1 | 03012020 | 应用程序接口 | 重新计算 | 2 |
1 | 04012020 | 鲁德 | 好 | 2 |
1 | 05012020 | 应用程序接口 | 重新计算 | 3 |
1 | 06012020 | 迈克尔 | 好的,额外的信息 | 3 |
1 | 07012020 | 罗伊 | 好 | 4 |
1 | 08012020 | 罗伊 | 好 | 5 |
当然,您可以使用 CTE 或 INNER JOIN。但是我需要这个结果出现在 SELECT 语句中。我试过了这个:
SUM( case when STATUS IN ( 'NEW', 'RECALC') THEN 0
else 1 end)
over( partition by ID order by Date asc)
as VERSION
这几乎可以做到,但是当一个人处理版本时,会停止添加版本号。它不应该这样做。
如果不清楚,请问!
SUM( case when STATUS IN ( 'NEW', 'RECALC') THEN 0
else 1 end)
over( partition by ID order by Date asc)
as VERSION
当一个人不断处理版本时,这将停止添加版本。它应该不断增加版本。
当一个人完成它时,它基本上需要添加一个版本号。因此,一个人查看 ID 后的行应该添加 1。API不是一个人,其他人都是:)
答:
0赞
GMB
6/23/2023
#1
当 API 以外的人处理 ID 后,版本会增加。
这读取起来类似于所有先前行(不包括当前行)的“非 API”行计数。
您没有标记您的数据库。一种合理的可移植方法是用条件 表示计数,并使用语法来调整窗口框架:sum
rows between
select t.*,
1 + coalesce(
sum(case when person != 'API' then 1 else 0 end) over(
partition by id
order by date
rows between unbounded preceding and 1 preceding
),
0
) as grp
from mytable t
order by id, date
小提琴:
编号 | 日期 | 人 | 地位 | GRP的 |
---|---|---|---|---|
1 | 2020-01-01 | 应用程序接口 | 新增功能 | 1 |
1 | 2020-01-02 | 雷姆科 | 好 | 1 |
1 | 2020-01-03 | 应用程序接口 | 重新计算 | 2 |
1 | 2020-01-04 | 鲁德 | 好 | 2 |
1 | 2020-01-05 | 应用程序接口 | 重新计算 | 3 |
1 | 2020-01-06 | 迈克尔 | 好的,额外的信息 | 3 |
1 | 2020-01-07 | 罗伊 | 好 | 4 |
1 | 2020-01-08 | 罗伊 | 好 | 5 |
评论
0赞
Joost Oskam
6/23/2023
你刚刚拯救了我的一天!如果你有时间,你能解释一下它是如何工作的吗?尤其是前面的无界行和前面的 1 行
0赞
GMB
6/23/2023
@JoostOskam: 表示:考虑前面的所有行(由子句定义),但不考虑当前行。rows between unbounded preceding and 1 preceding
order by date
评论