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

Mysql 从按另一字段排序的数据库中选择不同的行,mysql,sql,group-by,sql-order-by,Mysql,Sql,Group By,Sql Order By,我有一个如下结构的表 我需要的是从表中选择具有不同personal_id的行,但按顺序或时间戳递减。因此,我尝试按进行排序,查询如下所示 SELECT DISTINCT personal_id FROM comment_ballon WHERE ballon_id= ? and timestamp >=? ORDER BY timestamp DESC 但我不能这样做,因为很明显我不能按时间戳的顺序对行排序,因为它不在查询的SELECT部分。 因此,我将时间戳部分添加到查询中,正如

我有一个如下结构的表

我需要的是从表中选择具有不同personal_id的行,但按顺序或时间戳递减。因此,我尝试按进行排序,查询如下所示

SELECT DISTINCT personal_id
FROM comment_ballon
WHERE ballon_id= ?
  and timestamp >=?
ORDER BY timestamp DESC
但我不能这样做,因为很明显我不能按时间戳的顺序对行排序,因为它不在查询的SELECT部分。 因此,我将时间戳部分添加到查询中,正如预期的那样,它弄乱了我的不同部分(所有行都返回,因为时间戳对于所有行都是唯一的)

我尝试使用GROUPBY,但订单时间戳DESC再次出错

SELECT personal_id, timestamp
FROM comment_ballon
WHERE ballon_id = ?
  and timestamp >= ?
GROUP BY personal_id
ORDER BY timestamp DESC
如何实现这一点,根据唯一的个人ID选择行,但同时按DESC timestamp的顺序选择行

SELECT personal_id, max( timestamp ) as latest
FROM comment_ballon 
WHERE ballon_id=? and timestamp>=? 
group by personal_id
ORDER BY latest DESC
您可以按id分组并获得最大时间戳。按最大时间戳排序

您可以按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
这个怎么样

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

这样做有效,请检查小提琴:


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

如果可以,请检查小提琴:


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

具有相同
个人id的不同行可能具有不同的
时间戳值。那么,要使用哪个时间戳进行订购呢?具有相同
personal_id
的不同行可能具有不同的
timestamp
值。那么,订购时使用哪个时间戳呢?请注意,如果您想有一个更清晰、更容易理解的示例,您可以添加自己的ID而不是随机ID。请在您的答案中包含实际代码。如果sqlfiddle宕机,或者完全丢失,或者清理并删除了您的代码,您的答案对于任何未来的读者来说都是无用的。请注意,如果您希望有一个更清晰、更易于理解的示例,您可以添加自己的ID而不是随机ID。请在您的答案中包含实际代码。如果sqlfiddle宕机,或者完全丢失,或者清理并删除了您的代码,您的答案对任何未来的读者来说都是无用的。我想您在查询中指的是max(timestamp),而不是min(timestamp)。@aiswaryakrishna-因为您从未告诉过我们应该使用哪个时间戳值,
min()
是一个与
max()一样好的猜测
。我想您在查询中的意思是max(timestamp),而不是min(timestamp)。@aiswaryakrishna-因为您从未告诉我们应该使用哪个时间戳值,
min()
max()
一样是一个很好的猜测。