gpt4 book ai didi

sql - Oracle SQL 查询 - 使用 MAX() 函数时加入

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

下午好

当使用 MAX() 函数返回用户最近的登录时间时,我正在尝试组合一个将从 2 个表中选择数据的查询。

表格如下:

用户:

USERNAME          CREATED
JOHNSMITH 01/01/2015
MATTTYLER 12/12/2013
DAVIDCROSS 09/07/2014
SARAHTHOMPSON 02/05/2015

类(class):

USERNAME          ACTION          TIMESTAMP
JOHNSMITH LOGOUT 13/09/2015 10:00:00
MATTTYLER LOGOUT 13/09/2015 05:00:00
JOHNSMITH LOGIN 12/09/2015 15:00:00
MATTTYLER LOGIN 12/09/2015 11:00:00
JOHNSMITH LOGOUT 12/09/2915 12:00:00
JOHNSMITH LOGIN 12/09/2015 05:00:00

结果:

USERNAME          CREATED          TIMESTAMP (as LASTLOGIN)
JOHNSMITH 01/01/2015 12/09/15 15:00:00
MATTTYLER 12/12/2013 12/09/15 11:00:00
DAVIDCROSS 09/07/2014 NULL
SARAHTHOMPSON 02/05/2015 NULL

如果 MAX() 不是选择最近登录时间的最合适函数,请随时提出更好的方法。如果可能,您能否演示如何使用 SQL-89 和 SQL-92 连接来实现这一点?

非常感谢任何帮助,谢谢。

最佳答案

执行 LEFT JOIN 也让用户从未登录。GROUP BYMAX 获取每个用户的最新 TIMESTAMP.

select u.username, u.created, max(s."TIMESTAMP")
from users u
left join sessions s on u.username = s.username
group by u.username, u.created

SQL-92(使用连接。Timestamp 是 SQL-92 中的保留字,这就是它被分隔为 "TIMESTAMP" 的原因。

SQL-89(又名 SQL 1),如果没有可用的左连接,则执行相关子查询:

select u.username, u.created,
(select max("TIMESTAMP") from sessions s
where u.username = s.username)
from users u

(当使用旧式连接语法时,Oracle 没有 +==+ 用于左连接吗?)

关于sql - Oracle SQL 查询 - 使用 MAX() 函数时加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32551753/

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