MySQL 选择 GROUP BY 命令

标签 mysql group-by sql-order-by

我有一个mysql语句

SELECT * 
FROM tbl_messages 
WHERE to_user_id = '$user_id' OR from_user_id = '$user_id' 
GROUP BY from_user_id 
ORDER BY date_sent DESC

它产生了正确的结果,但它们的顺序不正确。

分组效果很好,但组中显示的记录是输入数据库的第一条记录,但我希望在每个组中显示最新记录。

有没有办法让每个组显示最新的记录?

2011-12-19 12:16:25 This is the first message
2011-12-19 12:18:20 This is the second message
2011-12-19 12:43:04 This is the third message

该组显示“这是第一条消息”,我想要“这是第三条消息”,因为这是最新的记录/消息。

干杯

最佳答案

这可能有效(但不能保证):

SELECT * 
FROM
  ( SELECT *
    FROM tbl_messages 
    WHERE to_user_id = '$user_id' OR from_user_id = '$user_id' 
    ORDER BY date_sent DESC
  ) tmp
GROUP BY from_user_id 
ORDER BY date_sent DESC

这应该有效:

SELECT t.* 
FROM 
    tbl_messages AS t
  JOIN
    ( SELECT from_user_id 
           , MAX(date_sent) AS max_date_sent
      FROM tbl_messages 
      WHERE to_user_id = '$user_id' OR from_user_id = '$user_id' 
      GROUP BY from_user_id 
    ) AS tg
    ON  (tg.from_user_id, tg.max_date_sent) = (t.from_user_id, t.date_sent)
ORDER BY t.date_sent DESC

关于MySQL 选择 GROUP BY 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8556283/

相关文章:

mysql - 两个sql查询合而为一

sql-server - 加入具有多行的 2 个表

MySQL按列和列值排序

mysql - 名称按 Mysql 排序

具有本地数据库和远程数据库的 Android 项目

mysql - rails 3 : "Schema migrations table does not exists yet"

python - Groupby 两列忽略对的顺序

php - MySQL 排序问题

mysql - 添加最新结果

python - 用 Pandas 标记列中的重复值