gpt4 book ai didi

sql - 根据时间合并两个表

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

我是 Oracle SQL 的新手。请通过仅在 Oracle SQL 中提供解决方案来帮助我解决这个问题。

我们有两个表LOGINLOGOUT。一个用于登录数据,另一个用于注销数据,如下所述。

登录

LOGIN_TIME                      ID
19-DEC-19 03.59.33.637000000 AM 1
19-DEC-19 06.58.16.318000000 AM 2
19-DEC-19 10.19.26.039000000 AM 2
19-DEC-19 10.26.03.411000000 AM 2
19-DEC-19 01.35.56.006000000 PM 2

注销

LOGOUT_TIME                     ID
19-DEC-19 04.34.22.535000000 AM 1
19-DEC-19 07.52.21.568000000 AM 2
19-DEC-19 02.06.13.585000000 PM 2

我想以这样一种方式合并这两个表,以便获得具有各自登录和注销时间的 ID。下面提到了预期的输出。

预期输出

ID          LOGIN_TIME                      LOGOUT_TIME
1 19-DEC-19 03.59.33.637000000 AM 19-DEC-19 04.34.22.535000000 AM
2 19-DEC-19 06.58.16.318000000 AM 19-DEC-19 07.52.21.568000000 AM
2 19-DEC-19 10.19.26.039000000 AM (null)
2 19-DEC-19 10.26.03.411000000 AM (null)
2 19-DEC-19 01.35.56.006000000 PM 19-DEC-19 02.06.13.585000000 PM

提前致谢。

最佳答案

我将您的查询理解为某种间隙和孤岛问题。

我会通过union两个表来解决这个问题,然后做一个窗口总和来识别组:每次遇到登录时,一个新的组开始。最后一步是按组聚合。

select
id,
min(case when action = 'in' then dt end) login_time,
max(case when action = 'out' then dt end) logout_time
from (
select
t.*,
sum(case when action = 'in' then 1 else 0 end)
over(partition by id order by dt) grp
from (
select id, login_time dt, 'in' action from login
union all select id, logout_time, 'out' from logout
) t
) t
group by id, grp
order by id, grp

Demo on DB Fiddle :

ID | LOGIN_TIME                      | LOGOUT_TIME                    -: | :------------------------------ | :------------------------------ 1 | 19-DEC-19 03.59.33.637000000 AM | 19-DEC-19 04.34.22.535000000 AM 2 | 19-DEC-19 06.58.16.318000000 AM | 19-DEC-19 07.52.21.568000000 AM 2 | 19-DEC-19 10.19.26.039000000 AM | null                           2 | 19-DEC-19 10.26.03.411000000 AM | null                           2 | 19-DEC-19 01.35.56.006000000 PM | 19-DEC-19 02.06.13.585000000 PM

关于sql - 根据时间合并两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59431030/

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