从另一个字段排序的数据库中选择不同的行
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。
我有一个 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。