MYSQL实现分组排序并取组内第⼀条数据
在使⽤phabricator时,有这么⼀个需求。出任务实际开始时间(⾃定义字段),思路就是出ID最⼩的那个并⽤objectPHID分组。
思路是到第⼀次改变 执⾏开始情况的记录,那么就要进⾏分组并出符合条件的第⼀条记录。
第⼀种:
SELECT r.* FROM (SELECT * FROM maniphest_transaction
where objectPHID in('PHID-TASK-iq5chdco7xnp6ohhvbzt','PHID-TASK-ctmpyikm2l33jlrld2m5')
and metadata='{"customfield:key":"std:maniphest:uisftech:begins-the-situation"}'
order by id desc LIMIT 100
) r
GROUP BY r.objectPHID
加上limit 100,对排序进⾏固定。因为默认是升序,弊端:只能查出来limit后的数据。
mysql删除重复的数据保留一条第⼆种:
select * from maniphest_transaction where id in
(select min(id) mid from maniphest_transaction where
objectPHID in('PHID-TASK-iq5chdco7xnp6ohhvbzt','PHID-TASK-ctmpyikm2l33jlrld2m5')
and metadata='{"customfield:key":"std:maniphest:uisftech:begins-the-situation"}'
group by objectPHID)
采⽤in和⼦查询,此处是min最⼩,如果要出来最⼤,使⽤max(id)。
或者join
select * from checkin A join (select max(checkin_id) id from checkin GROUP BY card_id) B on A.checkin_id = B.id
如果觉得此处SQL抽象,可参考:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。