查询每个分组中第N的一条记录

查询每个分组中第N的一条记录

-- 天气表,每天每个地区采集了多条记录的天气信息,但是时间只记录到了天,导致同一个地区同一天出现了多条天气记录
-- 目的:获取所有地区在每天中第N的一条记录
select * from data_weather where `id` in
(
    select  t1.`id`
    from 
        data_weather t1 left join 
        data_weather t2 on t1.addtime=t2.addtime and t1.areaId=t2.areaId and t1.`id`<=t2.`id`
    group by t1.`id`,t1.areaId,t1.addtime
    having count(t1.`id`)=5
)

思路:将表中每个分组内的记录和自己组内的所有记录进行对比,比较条件为表的id号(或其他唯一约束字段),按照比较条件筛选后每个组内的记录会增多,假设源表某个组内有m条记录,

则比较后的记录条数为 1+2+...+m条记录,然后再分组统计,如:count(`id`)=1表示分组内最新的一条记录,count(`id`)=2表示分组内倒数第2条记录。

通过上述方式就可查询分组内第N条记录。

原文地址:https://www.cnblogs.com/TheoryDance/p/6138113.html