为每个重复的组获取 max(timestamp) (IBM DB2)
Get max(timestamp) for each group with repetition (IBM DB2)
ANSWER: 需要使用 LEAD 和 PARTITION BY 函数。请参考Gordon的回答。
我有以下数据集:
我想获取结果集中的第 1、3、5、7 行。
结果集应该如下所示:
11/10/2020 19:36:11.548955 IN_REVIEW
11/8/2020 19:36:11.548955 EXPIRED
11/6/2020 19:36:11.548955 IN_REVIEW
11/4/2020 19:36:11.548955 ACTIVE
好吧,由于您是按 interac_Reg_stat 分组的,因此您永远不会获得 IN_REVIEW 状态的 2 个单独的行。要获得您想要的结果,您需要添加一个子查询来查找具有特定 interac_Reg_stat 且位于另一个特定 interac_Reg_stat.
之前的所有项目
使用window 功能。 LEAD()
从“下”行获取值,因此仅在值发生变化时进行过滤:
SELECT t.*
FROM (SELECT t.*,
LEAD(interac_Reg_stat) OVER (PARTITION BY Acct_No ORDER BY xcn_tmstmp) as next_interac_Reg_stat
FROM TABLE
) t
WHERE interac_Reg_stat <> next_interac_Reg_stat OR
next_interac_Reg_stat IS NULL;
ANSWER: 需要使用 LEAD 和 PARTITION BY 函数。请参考Gordon的回答。
我有以下数据集:
我想获取结果集中的第 1、3、5、7 行。
结果集应该如下所示:
11/10/2020 19:36:11.548955 IN_REVIEW
11/8/2020 19:36:11.548955 EXPIRED
11/6/2020 19:36:11.548955 IN_REVIEW
11/4/2020 19:36:11.548955 ACTIVE
好吧,由于您是按 interac_Reg_stat 分组的,因此您永远不会获得 IN_REVIEW 状态的 2 个单独的行。要获得您想要的结果,您需要添加一个子查询来查找具有特定 interac_Reg_stat 且位于另一个特定 interac_Reg_stat.
之前的所有项目使用window 功能。 LEAD()
从“下”行获取值,因此仅在值发生变化时进行过滤:
SELECT t.*
FROM (SELECT t.*,
LEAD(interac_Reg_stat) OVER (PARTITION BY Acct_No ORDER BY xcn_tmstmp) as next_interac_Reg_stat
FROM TABLE
) t
WHERE interac_Reg_stat <> next_interac_Reg_stat OR
next_interac_Reg_stat IS NULL;