【问题标题】:How can I get the number of rows within a certain periodo for each row in PostgreSQL?如何获取 PostgreSQL 中每一行在某个周期内的行数?
【发布时间】:2019-06-05 20:05:01
【问题描述】:

我在 PostgreSQL 中有一个表,我想为每一行获取在每行日期前 30 天的一段时间内的行数(包括每个时刻的行事件) .示例:

Event.         Date

A.                 2019-02-13

B.                 2019-02-15

C.                 2019-03-17

D.                 2019-03-19

E.                 2019-04-22

F.                  2019-04-23

G.                 2019-04-30

预期输出:

Event.         Date.                 Events occurred in last month

A.                 2019-02-13.     1

B.                 2019-02-15.     2

C.                 2019-03-17.     1

D.                 2019-03-19.     2

E.                 2019-04-22.     1

F.                  2019-04-23.     2

G.                 2019-04-30.     3

例如,对于事件 B,上个月有两个事件:B 本身和 A,因为它发生在 2019 年 2 月 15 日不到 30 天。对于事件 G,有 3 个事件,因为从上个月(从 2019-03-30 开始)已经有 3 个事件(G 本身、E 和 F)。

如何在 PostgreSQL 查询中实现这一点?

问候

【问题讨论】:

  • 在您的示例数据中,每个事件都有一个条目。看看countgroup by

标签: sql postgresql cumulative-sum


【解决方案1】:

使用带有窗口子句的窗口函数:

select e.*,
       count(*) over (order by date range between interval '30 day' preceding and current row)
from events e;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 2023-03-31
    • 2016-03-17
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多