Group By 给出了数据库中最早的结果
Group By gives me the oldest results from the database
我目前正在使用以下 SQL 从数据库中获取最新消息。下面的 SQL 给了我数据库中最旧的消息。我按 message_replay_id 分组,因为这是数据库中的公共列,我也将其用作参考。
查询的数据库结构和结果
这是没有使用查询的所有记录
MySQL
SELECT * FROM messages
WHERE message_from = '1' || message_to = '1'
GROUP BY message_replay_id
ORDER BY message_id DESC
如您所见,message_id 是
11, 7, 5, 1 (Oldest ID's)
但事实上最新的 ID 是
13, 7, 6, 20
我的问题又是我做错了什么,我无法从数据库中获取最新结果。
要获得最新的结果,您需要匹配最新的行。
最简单的方法是使用子查询获取每个 message_replay_id 的最新行,然后将其与消息连接起来以获取其余详细信息。
SELECT a.*
FROM messages a
INNER JOIN
(
SELECT message_replay_id, MAX(message_id) AS latest_message
FROM messages
WHERE message_from = '1' || message_to = '1'
GROUP BY message_replay_id
) b
ON a.message_replay_id = b.message_replay_id
AND a.message_id = b.latest_message
ORDER BY a.message_id DESC
我目前正在使用以下 SQL 从数据库中获取最新消息。下面的 SQL 给了我数据库中最旧的消息。我按 message_replay_id 分组,因为这是数据库中的公共列,我也将其用作参考。
查询的数据库结构和结果
这是没有使用查询的所有记录
MySQL
SELECT * FROM messages
WHERE message_from = '1' || message_to = '1'
GROUP BY message_replay_id
ORDER BY message_id DESC
如您所见,message_id 是
11, 7, 5, 1 (Oldest ID's)
但事实上最新的 ID 是
13, 7, 6, 20
我的问题又是我做错了什么,我无法从数据库中获取最新结果。
要获得最新的结果,您需要匹配最新的行。
最简单的方法是使用子查询获取每个 message_replay_id 的最新行,然后将其与消息连接起来以获取其余详细信息。
SELECT a.*
FROM messages a
INNER JOIN
(
SELECT message_replay_id, MAX(message_id) AS latest_message
FROM messages
WHERE message_from = '1' || message_to = '1'
GROUP BY message_replay_id
) b
ON a.message_replay_id = b.message_replay_id
AND a.message_id = b.latest_message
ORDER BY a.message_id DESC