gpt4 book ai didi

sql - 在Oracle sql中以T为状态的最后更改的数据

转载 作者:行者123 更新时间:2023-12-02 02:51:08 24 4
gpt4 key购买 nike

我的数据如下

在下面的示例中,最新记录具有T,T的最后一次出现是在17年4月3日更新的,因此需要显示行

EMP     EFFDT     STATUS
11367 15-Apr-15 A
11367 14-Jun-15 A
11367 10-Aug-15 T
11367 2-Apr-17 A
11367 3-Apr-17 T *
11367 10-Apr-17 T

在下面的示例中,最新记录具有T,T的最后一次出现是在18年2月23日更新的,因此需要显示行
EMP     EFFDT     STATUS
20612 4-Sep-16 A
20612 23-Feb-18 T *
20612 20-Jul-18 T

在下面的示例中,最新记录具有T,这是唯一的出现,因此将其显示
EMP    EFFDT      STATUS
20644 12-Jul-15 A
20644 8-Aug-16 A
20644 6-Oct-16 T*

在下面的示例中,最新记录没有T,因此无需显示
EMP    EFFDT      STATUS
21155 18-May-17 T
21155 21-Jun-17 A
21155 13-Mar-18 T
21155 15-Aug-18 A

我的期望输出应为(带有*标记的记录)
EMP    EFFDT      STATUS
11367 3-Apr-17 T
20612 23-Feb-18 T
20644 6-Oct-16 T

最佳答案

这是一个孤岛和差距的问题。

在CTE中,您尝试找出哪个岛的T为最后更新(t = 0)

SQL DEMO

WITH cte as (
SELECT "EMP",
"EFFDT",
SUM(CASE WHEN "STATUS" <> 'T'
THEN 1
ELSE 0
END) OVER (partition by "EMP" ORDER BY "EFFDT" DESC) as t
FROM Table1
)
SELECT "EMP", MIN("EFFDT") as "EFFDT", MAX('T') as "STATUS"
FROM cte
WHERE t = 0
GROUP BY "EMP"

输出
|   EMP |                 EFFDT | STATUS |
|-------|-----------------------|--------|
| 11367 | 2017-04-03 00:00:00.0 | T |
| 20612 | 2018-02-23 00:00:00.0 | T |
| 20644 | 2016-10-06 00:00:00.0 | T |

对于调试,您可以尝试
SELECT *
FROM cte

看看如何创建 t

关于sql - 在Oracle sql中以T为状态的最后更改的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52173516/

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