【发布时间】:2020-04-13 07:24:21
【问题描述】:
我是 Oracle SQL 的新手。请通过仅在 Oracle SQL 中为我提供解决方案来帮助我解决此问题。
我们有两个表 LOGIN 和 LOGOUT。一个用于登录数据,另一个用于注销数据,如下所述。
登录
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
提前致谢。
【问题讨论】:
-
为什么你的输出不正确?
-
第三行的 LOGOUT_TIME 预计为空。它给了我 19-DEC-19 02.06.13.585000000 PM 的值,这应该是第 5 行的 LOGOUT_TIME。
-
我看到了,但不明白为什么要从“19-DEC-19 02.06.13.585000000 PM”注销的 3 个可能登录中选择最后一次登录。
-
如果在表中再添加一个注销
19-DEC-19 02.06.20 PM 2会怎样? -
LOGIN_TIME 是升序的,所以第三行的 LOGOUT_TIME 必须小于 NEXT ROWS 的 LOGIN_TIME。
标签: sql oracle date join gaps-and-islands