【问题标题】:How to show all dates on a PSQL running sum in a timeframe如何在时间范围内显示 PSQL 运行总和的所有日期
【发布时间】:2022-01-18 00:22:05
【问题描述】:

我正在使用 PSQL 执行此运行总和,我希望获取订阅服务的用户的每日总数。通过我当前的查询,我得到了客户订阅日期的累积总和,但我无法看到新客户未订阅日期的值。我想要一个所有日期的列表,以及每天订阅的相应客户总数,如下例所示

with data as (select
  date_trunc('day', userstatuslog.modified) as modified_date, 
  user.status,
  count(1)
from userstatuslog
 join user on user.id = userstatuslog.id

where 
  user.status = 'Traveling' and     
  user.type = 'II' or 
  user.type = 'III'
group by
  1, 2
)

select
  modified_date,
  sum(count) over (order by modified_date asc rows between unbounded preceding and current row)
from data
order by
  modified_date desc

当前结果:

预期结果:

【问题讨论】:

  • 创建一个日历表并外部连接您的数据。
  • 或者使用generate_series()动态生成日历表
  • 如何实现?
  • 对@Serg 的实现有什么想法吗??

标签: sql postgresql


【解决方案1】:

例如,要包括整个 2021 年 12 月 1..31 日:

..
select
  c.d,
  sum(data.count) over (order by c.d asc rows between unbounded preceding and current row)
from generate_series('2021-12-01 00:00+00'::TIMESTAMP WITH TIME ZONE, '2021-12-31 00:00+00', '1 days') c(d)
left join data on data.modified_date = c.d
order by c.d desc;

我使用了TIMESTAMP WITH TIME ZONE,因为您显示的数据具有时区规范。它应该和modified_date真的是同一类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    相关资源
    最近更新 更多