PostgreSQL按历元月份分组
我得到了大量使用大纪元时间的行。 id、customerid、orderid、uxtime 在我的办公桌上,现在正在建立一个管理页面,允许其他人快速浏览这一大堆行 他们希望能够选择年份和月份,并获得月份列表 这意味着:选择2016年和4月,它们将返回4月16日的所有ID 这可以在一个聪明酷的sql语句中完成。那就是你进来的地方。我正在努力,并取得了一些进展,但我敢肯定你们所有人都比我快得多 要将“2016年4月”转换为unix epoch,请使用PostgreSQL按历元月份分组,sql,postgresql,epoch,Sql,Postgresql,Epoch,我得到了大量使用大纪元时间的行。 id、customerid、orderid、uxtime 在我的办公桌上,现在正在建立一个管理页面,允许其他人快速浏览这一大堆行 他们希望能够选择年份和月份,并获得月份列表 这意味着:选择2016年和4月,它们将返回4月16日的所有ID 这可以在一个聪明酷的sql语句中完成。那就是你进来的地方。我正在努力,并取得了一些进展,但我敢肯定你们所有人都比我快得多 要将“2016年4月”转换为unix epoch,请使用make_date()和extract() 您还需
make_date()
和extract()
您还需要where子句的上限,通常为下个月的第一个月:
extract(epoch from make_date(2016,4,1) + interval '1' month)
因此,您的SQL语句如下所示:
select ...
from ...
where uxtime >= extract(epoch from make_date(2016,4,1))
and uxtime < extract(epoch from make_date(2016,4,1) + interval '1' month);
然而,上述解决方案比第一个解决方案的速度要慢,因为它不能“利用uxtime
如果您确实希望该解决方案加快查询速度,您可以在上创建一个索引,以\u char(to\u timestamp(uxtime),'yyyy-mm')
。请回答您的问题,并添加一些示例数据和基于该数据的预期输出。请您的问题不会在评论中发布代码或附加信息。
select ...
from ...
where uxtime >= extract(epoch from make_date(2016,4,1))
and uxtime < extract(epoch from make_date(2016,4,1) + interval '1' month);
select ...
from ...
where to_char(to_timestamp(uxtime), 'yyyy-mm') = '2016-04'