数据如下所示:

ID Date Person Status
1 01012020 API NEW
1 02012020 REMCO OKAY
1 03012020 API RECALC
1 04012020 RUUD OKAY
1 05012020 API RECALC
1 06012020 MICHAEL OKAY EXTRA INFO
1 07012020 ROY OKAY
1 08012020 ROY OKAY

我必须添加一行显示此ID的版本.当一个人而不是API处理ID时,版本加起来.

该序列应从1开始.

因此,结果应该如下所示:

ID Date Person Status VERSION
1 01012020 API NEW 1
1 02012020 REMCO OKAY 1
1 03012020 API RECALC 2
1 04012020 RUUD OKAY 2
1 05012020 API RECALC 3
1 06012020 MICHAEL OKAY EXTRA INFO 3
1 07012020 ROY OKAY 4
1 08012020 ROY OKAY 5

当然,您可以使用CTE或INTER JOIN.But I need this result to be in the SELECT statement.我试过这个:

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不是人,其他人都是:)

推荐答案

after个不是API的人处理ID时,版本是累加的.

这看起来像是所有preceding行中"非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

fiddle:

id date person status grp
1 2020-01-01 API NEW 1
1 2020-01-02 REMCO OKAY 1
1 2020-01-03 API RECALC 2
1 2020-01-04 RUUD OKAY 2
1 2020-01-05 API RECALC 3
1 2020-01-06 MICHAEL OKAY EXTRA INFO 3
1 2020-01-07 ROY OKAY 4
1 2020-01-08 ROY OKAY 5

Sql相关问答推荐

按postquist中的日期查询json列

如何重用表值用户定义函数调用的结果?

JSON列之间的Postgr聚合

将主表与历史表连接以获取主表的当前汇率以及历史表中的上一个和最后一个汇率

为什么在postgres中,横向连接比相关子查询快?

删除事务中的本地临时表

如何从JSON数组中 Select 多个值

SQL:如何查找聚合满足条件的连续日期

查询页面推荐

在迁移到.NET8后,使用Array.Containers的F#查询表达式失败

Oracle分层查询-两条路径在末尾合并为一条

如何使用不重复的单个顶级字段(列)向json数组 Select 多行

PostgreSQL-按距离阈值挤压相邻行的性能

在Oracle SQL中按月生成日期

创建具有多个子查询的 SQL 视图

如何为给定的股票数据集计算利润/亏损,确保先卖出先买入的股票

获取记录的上一个值,并将其与当前值一起显示

带聚合函数的 percentile_cont

postgres按组消除分区中的NULLS

SQLite 中的过滤运行总和视图