mysql - 求教一个sql,取出所有半年内的每个月的第一条符合条件的记录

查看:478
本文介绍了mysql - 求教一个sql,取出所有半年内的每个月的第一条符合条件的记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

如题呢。有一张表记录了一些数据和数据的时间戳

解决方案

select * from tbl;

       tstamp        | data
---------------------+------
 2016-02-03 00:00:00 |  200
 2016-02-04 00:00:00 |  300
 2015-07-06 00:00:00 |  202
 2016-09-01 00:00:00 |  300
 2015-07-06 00:00:00 |  324
 2015-07-15 00:00:00 |  299
(6 行记录)

先把数据按月份划分窗口,再把每个月份窗口内部排序,最后选出序号为1的记录。

select tstamp, data from
  (select tstamp, data, row_number() over
    (partition by date_trunc('month', tstamp) order by tstamp) as row
  from tbl) as tbl_windows
where row = 1;

       tstamp        | data
---------------------+------
 2015-07-06 00:00:00 |  202
 2016-02-03 00:00:00 |  200
 2016-09-01 00:00:00 |  300
(3 行记录)

如果表有自增的id列,还可以用更简单的

select tstamp, data from tbl where id in
  (select min(id) from tbl group by date_trunc('month', tstamp));

这篇关于mysql - 求教一个sql,取出所有半年内的每个月的第一条符合条件的记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆