gpt4 book ai didi

mysql - 通过不显示空值进行分组

转载 作者:行者123 更新时间:2023-11-29 20:54:19 24 4
gpt4 key购买 nike

编辑:DEMO

这是我的餐 table 任务:

user_id | date       | hour  | done
1 | 2016-01-01 | 08:00 | 08:03:07
1 | 2016-01-01 | 09:00 | 09:05:07
2 | 2016-01-01 | 11:00 | 11:07:05
2 | 2016-01-01 | 11:10 | 11:18:01
3 | 2016-01-01 | 9:00 | null
3 | 2016-01-01 | 10:00 | null
3 | 2016-01-01 | 10:05 | null

我想获取每个用户的最后一项任务:

user_id | date       | hour  | done
1 | 2016-01-01 | 09:00 | 09:05:07
2 | 2016-01-01 | 11:10 | 11:18:05
3 | 2016-01-01 | 10:05 | null

所以我使用了类似的 GROUP BY 并且它有效:

SELECT user_id, MAX(done) done FROM errand WHERE done = '2016-06-01' GROUP BY user_id;

它告诉我:

user_id | done
1 | 09:05:07
2 | 11:18:05
3 | null

但是,问题是我无法通过在 SELECT 中添加时间和日期来显示时间和日期,因为我收到以下消息:(错误代码:1055。SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含非聚合列。 ..在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容)。

所以我尝试了这个:

SELECT * FROM errand e JOIN (
SELECT user_id u, MAX(done) d
FROM errand WHERE date = '2016-06-01'
GROUP BY user_id
) x on x.a = e.user_id AND x.b = e.done;

但它只显示done不为空的行:

user_id | date       | hour  | done
1 | 2016-01-01 | 09:00 | 09:05:07
2 | 2016-01-01 | 11:10 | 11:18:05

如何让第三个用户的 did 为空?

最佳答案

使用null-safe equal运算符,以便将 NULLNULL 进行比较。

SELECT e.* FROM errand e JOIN (
SELECT user_id u, MAX(done) d
FROM errand WHERE date = '2016-06-01'
GROUP BY user_id
) x on x.u = e.user_id AND x.d <=> e.done;

DEMO

关于mysql - 通过不显示空值进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37751850/

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