我的表如下所示(我使用的是 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 然后对结果进行排序。
有任何想法吗?谢谢。
正确使用此操作的一种方法group by
:
select l.*
from table l
inner join (
select
m_id, max(timestamp) as latest
from table
group by m_id
) r
on l.timestamp = r.latest and l.m_id = r.m_id
order by timestamp desc
这是如何运作的:
- 为每个不同的选择最新的时间戳
m_id
在子查询中
- 只选择行
table
与子查询中的行匹配(此操作 - 执行联接,但没有从第二个表中选择任何列,它只是用作过滤器 - 被称为“半连接” http://en.wikipedia.org/wiki/Relational_algebra#Semijoin_.28.E2.8B.89.29.28.E2.8B.8A.29如果你好奇的话)
- 对行进行排序
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)