gpt4 book ai didi

mysql - 如何在有约束的情况下查询数据库中每个用户在给定日期的最后一个条目?

转载 作者:行者123 更新时间:2023-11-29 04:27:20 25 4
gpt4 key购买 nike

我在 MySQL 数据库中查询一个非常大的事件日志,试图找出每个用户在特定日期的午夜做了什么。要注意的是,我只对可能的日志消息的一个子集感兴趣,并且我想要该子集中在午夜之前的最后一个日志条目。这是我到目前为止所拥有的:

SELECT user, dateAndTime, msg
FROM Log
WHERE msg in ('off', 'on', 'sleep', 'wake')
AND logDate = '2011-12-31';
ORDER BY user ASC, dateAndTime DESC

(我们的用户和消息类型为 VARCHAR,logDate 为 DATE,dateAndTime 为 DATETIME。)

这似乎是良好的开端。结果按用户名分组显示,并按时间排序。 有没有办法只为每个用户提取这些结果的第一行?我总是可以对结果进行后处理,但这似乎是我应该能够对查询本身进行的操作。我对成套思考而不是按程序思考还很陌生,所以如果解决方案应该是显而易见的,我提前道歉。

附加说明...

我在 SO 上发现了许多其他问题来处理此类问题,但我的额外限制使它变得更加困难。我尝试修改 this query ,但我认为 GROUP BY 子句以某种方式失去了对 msg 的限制。

我也在时间限制下工作。查询正在通过 5 分钟后自动超时的 Web 服务(我无法控制)。日志表很大(仅 2011 年 12 月 31 日就有近 200 万行),所以我尝试的大多数涉及连接的解决方案都超时了。

更新:

我发现了一些以前不知道的数据。对于给定的 dateAndTime每个用户有多个行

最佳答案

SELECT l.user, l.dateAndTime, l.msg
FROM Log l
INNER JOIN (SELECT user, MAX(dateAndTime) AS MaxDateTime
FROM log
WHERE msg in ('off', 'on', 'sleep', 'wake')
AND logDate = '2011-12-31'
GROUP BY user) q
ON l.user = q.user
AND l.dateAndTime = q.MaxDateTime
WHERE l.msg in ('off', 'on', 'sleep', 'wake')
ORDER BY l.user ASC

关于mysql - 如何在有约束的情况下查询数据库中每个用户在给定日期的最后一个条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8928951/

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