【发布时间】:2012-04-19 07:43:42
【问题描述】:
我的表看起来像这样(我正在使用 MySQL):
m_id | v_id | timestamp
------------------------
6 | 1 | 1333635317
34 | 1 | 1333635323
34 | 1 | 1333635336
6 | 1 | 1333635343
6 | 1 | 1333635349
我的目标是对每个 m_id 取一次,并按最高时间戳排序。
结果应该是:
m_id | v_id | timestamp
------------------------
6 | 1 | 1333635349
34 | 1 | 1333635336
我写了这个查询:
SELECT * FROM table GROUP BY m_id ORDER BY timestamp DESC
但是,结果是:
m_id | v_id | timestamp
------------------------
34 | 1 | 1333635323
6 | 1 | 1333635317
我认为这是因为它首先执行 GROUP_BY 然后 ORDER 结果。
有什么想法吗?谢谢。
【问题讨论】:
-
使用
MAX从您的组中选择最大值 -
没有聚合函数的
GROUP BY子句(例如:COUNT(), SUM(), MAX())完全没有意义。 MySQL 甚至允许这样做让我感到困惑。想一想,如果你对组不做任何事情,你为什么要分组? -
对“组”的内容进行排序是 MySQL 以前版本中的一个错误。按照 SQL 标准,在这种情况下,
ORDER BY必须只影响GROUP BY的结果,而不是分组前的数据。 -
@NullUserException - 没有聚合函数的
GROUP BY的正确 用法是按主键分组。在您的连接产生 1:manySELECT a.id, a.name, a.age, MAX(b.savings) FROM a INNER JOIN b on a.id = b._id GROUP BY a.id时很有用 -
@NullUserException 它允许在使用查找表进行多对多连接时回退。
标签: mysql sql group-by greatest-n-per-group