我有一个在工作项上发生的"操作"的表格.我最初使用Row Number和Partition按顺序对表中的每个操作进行计数,如下所示工作得很好.

Current Table

+---------------+--------------------+-----------+-----------+--------------+
| Work Item Ref | Work Item DateTime | Auditable | Action ID | Action Count |
+---------------+--------------------+-----------+-----------+--------------+
|          2500 | 19/05/2023 10:01   | Yes       |        20 |            1 |
|          2501 | 19/05/2023 10:02   | Yes       |        11 |            1 |
|          2501 | 19/05/2023 10:03   | Yes       |         9 |            2 |
|          2501 | 19/05/2023 10:04   | No        |        19 |            3 |
|          2501 | 19/05/2023 10:06   | Yes       |         5 |            4 |
|          2502 | 19/05/2023 10:04   | No        |         2 |            1 |
|          2502 | 19/05/2023 10:05   | Yes       |         4 |            2 |
+---------------+--------------------+-----------+-----------+--------------+

Code

ROW_NUMBER() OVER(PARTITION BY [Work Item Ref] ORDER BY [Work Item DateTime] asc) AS [Action Count]

但现在,我们需要相同的计数,但只在"Audable"列显示为"Yes"的情况下才需要.我try 在PARTITION BYORDER BY之间添加一个WHERE子句,但意识到这不是正确的语法.我需要它基本上是only个顺序计数,当标准满足时.如何实现下面的示例?

Desired Results

+---------------+--------------------+-----------+-----------+--------------+
| Work Item Ref | Work Item DateTime | Auditable | Action ID | Action Count |
+---------------+--------------------+-----------+-----------+--------------+
|          2500 | 19/05/2023 10:01   | Yes       |        20 |            1 |
|          2501 | 19/05/2023 10:02   | Yes       |        11 |            1 |
|          2501 | 19/05/2023 10:03   | Yes       |         9 |            2 |
|          2501 | 19/05/2023 10:04   | No        |        19 |              |
|          2501 | 19/05/2023 10:06   | Yes       |         5 |            3 |
|          2502 | 19/05/2023 10:04   | No        |         2 |              |
|          2502 | 19/05/2023 10:05   | Yes       |         4 |            1 |
+---------------+--------------------+-----------+-----------+--------------+

推荐答案

您只需将row_number()除以额外的列,并将其包装在case表达式中:

CASE WHEN auditable = 'Yes' THEN
    ROW_NUMBER() OVER(
        PARTITION BY [Work Item Ref], [Auditable]
        ORDER BY [Work Item DateTime]
    ) 
END AS [Action Count]

Sql相关问答推荐

PostgreSQL:获取每家店铺收入最高的员工

在Golang中管理数据库事务的简洁方法

如何根据计数和分组获取订单总数

如何从JSON数组中 Select 多个值

在Oracle SQL中将列值转换为行

找到最新的连线

对多个条件的SQL进行排名

根据最大值为字母数字大小写分配数值

用于从第二个表中提取具有最小最终价格值的记录的SQL查询

在PostgreSQL中汇总连接表中的 case 值

Oracle PL/SQL:解决DBMS输出大小限制的问题

合并分层表SQL中的第一个非空、变化的空位置

嵌套Json对象的SQL UPDATE WHERE

如何根据 SQL 中的阈值标记一个集群中的所有值?

如何用SQL组合客户拥有的产品

在 Oracle 21c 中透视文本值

错误:postgresql 中缺少表评级的 FROM 子句条目

在SQL中实现表格数据透视类型报表

Teradata 多个进程的最大进程结束时间捕获

如何从 2 个 SQLite 表构建嵌套对象?