【发布时间】:2015-12-04 20:40:27
【问题描述】:
我希望在某个数据集的结束日期之前聚合数据,而不是开始日期。例如,我想查询一个表并返回结果中显示日期的结束日期之前 30 天的匹配结果计数。原始表将仅包含进行销售的日期(时间戳)。示例:
sales_timestamp
------------------
2015-08-05 12:00:00
2015-08-06 13:00:00
2015-08-25 12:31:00
2015-08-26 01:02:00
2015-08-27 02:03:00
2015-08-29 04:23:00
2015-09-01 12:00:00
2015-09-02 12:00:00
2015-09-08 00:00:00
resulting 查询输出的示例如下:
date_period | count_of_sales
--------------------------------
2015-08-24 | 2
2015-08-31 | 6
2015-09-07 | 6
其中 2015-09-07 的 date_period 意味着公司在 2015 年 9 月 7 日结束的 30 天内售出了 6 件商品(如果是真正的 30 天期限,则从 2015 年 8 月 7 日开始)。
我一直在尝试date_trunc() 函数的变体,但似乎无法将截断应用于结束日期,而不是按开始时间分组。
这些数据将存放在 PostgreSQL 9.1 上。
【问题讨论】:
-
样本数据——和一个 SQL Fiddle——真的有助于传达你想要做的事情。例如,为什么您的月经间隔一周,但您希望销售 30 天?
-
如果您存储每周的销售数字,您的结果将不准确。 7 不能很好地进入 30。
-
@d_ominic 销售数字不是每周存储的。它们是实际销售本身的时间戳。
-
@GordonLinoff - postgresql - 我以前从未使用过 SQLfiddle,所以只存储了一些模式数据。最后,它有点毫无意义,因为它可以被认为是销售发生时记录的一个巨大的时间戳数据库。我只是想计算销售组的数量和结束日期与一些定义的提前期。
-
所以你想检查最后一个日期叫它
D....然后从D开始计算7天组直到30天?
标签: sql postgresql time-series postgresql-9.1 window-functions