gpt4 book ai didi

MySQL 按字符串聚合

转载 作者:太空宇宙 更新时间:2023-11-03 10:47:29 24 4
gpt4 key购买 nike

我有一个如下所示的事件表(还包含一些其他列):

+------------------+---------------+------------+
| data | event | logged_on |
+------------------+---------------+------------+
| 12345 | File | 2015-04-08 |
| 25232 | Bulletin | 2015-04-08 |
| 7890 | File | 2015-04-08 |
| youtube | Search | 2015-04-07 |
| 13568 | Bulletin | 2015-04-07 |
| 25232 | Bulletin | 2015-04-07 |
| 7890 | File | 2015-04-07 |
+------------------+---------------+------------+

我想获取最新日期的唯一数据值。所以所需的结果是:

+------------------+---------------+------------+
| data | event | logged_on |
+------------------+---------------+------------+
| 12345 | File | 2015-04-08 |
| 25232 | Bulletin | 2015-04-08 |
| 7890 | File | 2015-04-08 |
| youtube | Search | 2015-04-07 |
| 13568 | Bulletin | 2015-04-07 |
+------------------+---------------+------------+

但是对上面所有三列的不同选择返回不同日期的相同数据值。我无法从选择查询中删除 logged_on,因为其他地方需要它。

在 MySQL 中,我尝试使用以下查询:

SELECT DISTINCT
data,
event,
MAX(logged_on) AS latest_log_date
FROM
activites
WHERE
username = %%(username)s
GROUP BY
data
ORDER BY id DESC, latest_log_date DESC
LIMIT %%(limit)s
;

但这似乎行不通。我得到了一些结果,看起来是正确的,但事实并非如此。我无法对此进行推理。有什么想法吗?

最佳答案

使用 NOT EXISTS 仅返回不具有相同数据/事件的行。

SELECT data, event, logged_on AS latest_log_date
from activites a1
where not exists (select 1 from activites a2
where a1.data = a2.data
and a1.event = a2.event
and a2.logged_on > a1.logged_on)

我不太确定这是否是您想要的。也许您需要从子查询中删除 and a1.event = a2.event

关于MySQL 按字符串聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29509201/

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