【发布时间】:2021-01-05 15:24:35
【问题描述】:
所以我有这张桌子。
id header_id message_from message message_date attachment
1 0920-0001 USR-0920-0001 MESSAGE ID 1 18/09/2020 04:11
3 0920-0001 USR-0920-0001 18/09/2020 11:15 862db13b42d569b4afe69828736f4ad8.jpg
4 0920-0001 USR-0920-0001 MESSAGE ID 4 18/09/2020 11:16
5 0920-0001 ADMIN MESSAGE ID 5 18/09/2020 11:16
6 0920-0001 ADMIN MESSAGE ID 6 18/09/2020 11:16
7 0920-0002 USR-0920-0001 Hi 18/09/2020 11:52
我想达到这个结果
id header_id message_from message message_date attachment
6 0920-0001 ADMIN MESSAGE ID 6 18/09/2020 11:16
7 0920-0002 USR-0920-0001 Hi 18/09/2020 11:52
我正在尝试使用此查询
SELECT max(id) id , header_id,message from tbl_detail group by header_id
但是结果是这样的
id header_id message_from message message_date attachment
6 0920-0001 ADMIN MESSAGE ID 1 18/09/2020 11:16
7 0920-0002 USR-0920-0001 Hi 18/09/2020 11:52
我错过了什么吗?提前谢谢
【问题讨论】:
-
SELECT语句中的列之间没有关系。MAX(id)的计算独立于message。虽然MAX(id)对于具有相同header_id(即一个组)的一组行是唯一的,但对于不同的行,消息具有不同的值。因此,您的查询不是有效的 SQL。 MySQL 在 5.7.5 版本之前接受查询,但它保留自己为列message返回任何值的权利。 -
您不能使用
GROUP BY选择行。GROUP BY计算 aggregate values 用于行组。它使用来自每个组的数据生成新行。在similar question 上查看this answer。另请阅读this answer 了解详细说明。 -
请学习如何使用
GROUP BY。
标签: mysql sql datetime greatest-n-per-group window-functions