使用ORDER BY和GROUP BY一起
我的表看起来像这样(我使用MySQL):使用ORDER BY和GROUP BY一起
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 | 1333635343
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
如何工作的:
- 选择在子查询
- 仅从
table
选择行每个不同m_id
最新时间戳与子查询中的一行匹配(此操作 - 执行连接的地方,但没有从第二个表中选择列,它仅用作过滤器) - 知道n,作为情况下"semijoin"你是好奇) - 号令行
如果你真的不关心哪些时间戳你会得到你的v_id
始终是一个给定的m_i
你可以做同样的以下内容:
select m_id, v_id, max(timestamp) from table
group by m_id, v_id
order by timestamp desc
现在,如果v_id
变化对于一个给定m_id
那么你应该做到以下几点
select t1.* from table t1
left join table t2 on t1.m_id = t2.m_id and t1.timestamp < t2.timestamp
where t2.timestamp is null
order by t1.timestamp desc
SQL>
SELECT interview.qtrcode QTR, interview.companyname "Company Name", interview.division Division
FROM interview
JOIN jobsdev.employer
ON (interview.companyname = employer.companyname AND employer.zipcode like '100%')
GROUP BY interview.qtrcode, interview.companyname, interview.division
ORDER BY interview.qtrcode;
你可以试试这个
SELECT tbl.* FROM (SELECT * FROM table ORDER BY timestamp DESC) as tbl
GROUP BY tbl.m_id
不是个好主意。您正在选择没有限制的所有行 – AliN11 2017-11-25 07:41:26
只要你需要ASC来说明。写下面的查询。它将按照升序返回值。 SELECT * FROM表GROUP BY m_id ORDER BY m_id asc;
这不起作用。虽然它会扭转结果,但它仍然不会返回所需的结果。 – Richlv 2017-08-03 20:32:20
您需要将DESC
替换为ASC
。像这样写查询,它将按照升序返回值。
SELECT * FROM table GROUP BY m_id ORDER BY m_id ASC;
使用'MAX'从您的组 – Nanne 2012-04-05 14:45:20
一个'GROUP BY'条款没有聚合函数选择最大(如:'COUNT(),SUM(),MAX()')没有任何意义可言。它让我感到困惑,MySQL甚至允许这样做。想想看,如果你对这些团体没有做任何事情,你为什么要分组? – NullUserException 2012-04-05 14:47:48
如果m_id有两个不同的v_id,该怎么办?期望的结果是什么? – 2012-04-05 14:49:56