从另一个字段排序的数据库中选择不同的行

Selecting DISTINCT rows from database ordered by another field

我有一个 table 以下结构。

我需要的是使用 DISTINCT personal_id 从 table 中 select 行,但按顺序或递减时间戳。所以我尝试执行 ORDER BY,查询如下所示。

SELECT DISTINCT personal_id
FROM comment_ballon
WHERE ballon_id= ?
  and timestamp >=?
ORDER BY timestamp DESC

但我做不到,因为显然我不能按时间戳的顺序对行进行排序,因为它不在查询的 SELECT 部分。 所以我有点将时间戳部分添加到查询中,正如预期的那样,它搞砸了我的 DISTINCT 部分(所有行都返回,因为时间戳对所有行都是唯一的)。

我尝试使用 group by,但同样,顺序时间戳 DESC 被弄乱了。

SELECT personal_id, timestamp
FROM comment_ballon
WHERE ballon_id = ?
  and timestamp >= ?
GROUP BY personal_id
ORDER BY timestamp DESC

如何通过 select 基于唯一 personal_id 的行,但同时通过 DESC 时间戳的 ORDER 来实现此目的?

SELECT personal_id, max( timestamp ) as latest
FROM comment_ballon 
WHERE ballon_id=? and timestamp>=? 
group by personal_id
ORDER BY latest DESC

您可以按 id 分组并获取最大时间戳。按最大时间戳排序

这个怎么样?

select personal_id, timestamp
from
(
select personal_id, min(timestamp) as timestamp
from comment_ballon WHERE ballon_id=? and timestamp>=?
group by personal_id
) as a
order by timestamp desc

这有效,检查 fiddle:

http://sqlfiddle.com/#!9/65a79/2

它使用 MySQL 5.6,可能与其他 RDBMS 不同,但您将问题标记为 MySQL。