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 textno screen shotsedit 您的问题不要在 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 按纪元月分组的主要内容,如果未能解决你的问题,请参考以下文章

将列上的纪元时间保存到另一列 postgres

postgres 按聚合函数分组

如何使用 postgresql 将每月 26 日到下个月 25 日的数据分组?

Redshift:按范围将行分组并添加到输出列中

Pandas groupby 多列基础日期列按纪元周

postgres —— 分组集