PostgreSQL 按纪元月分组
Posted
技术标签:
【中文标题】PostgreSQL 按纪元月分组【英文标题】:PostgreSQL group by epoch month 【发布时间】:2017-10-13 19:47:51 【问题描述】:我得到了大量使用纪元时间的行。 id、customerid、orderid、uxtime
我现在的办公桌上是构建一个管理页面,允许其他人快速浏览这堆巨大的行。
他们希望能够选择年份和月份并获得月份列表。
这意味着:选择 2016 和 April 应该返回从 4 月 16 日的所有 id。
这已经可以在一个聪明酷的 sql-sentence 中完成。这就是你进来的地方。我正在努力并取得一些进展,但我很确定你们所有人都比我快得多。 :)
【问题讨论】:
请Edit您的问题并添加一些示例数据和基于该数据的预期输出。 Formatted text 请no screen shots。 edit 您的问题不要在 cmets 中发布代码或其他信息。 【参考方案1】:要将“2016 年 4 月”转换为 unix 纪元,请使用 make_date()
和 extract()
extract(epoch from make_date(2016,4,1))
您还需要一个 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);
稍微短一点的写法是:
select ...
from ...
where to_char(to_timestamp(uxtime), 'yyyy-mm') = '2016-04'
然而,上面的第一个解决方案会很多慢,因为它不能'利用uxtime
上的索引
您可以在to_char(to_timestamp(uxtime), 'yyyy-mm')
上创建一个索引,如果您真的更喜欢该解决方案来加快查询速度。
【讨论】:
以上是关于PostgreSQL 按纪元月分组的主要内容,如果未能解决你的问题,请参考以下文章