【发布时间】:2016-01-14 05:12:39
【问题描述】:
我有一个表,其中包含 user_id 数据和他们加入的时间戳。 如果我需要按月显示数据,我可以使用:
select
count(user_id),
date_trunc('month',(to_timestamp(users.timestamp))::timestamp)::date
from
users
group by 2
date_trunc 代码允许使用“秒”、“日”、“周”等。因此我可以得到按这些时间段分组的数据。 如何获取按“n 天”时间段(例如 45 天)分组的数据? 基本上我需要每 45 天显示用户数量。 任何建议或指导表示赞赏!
目前我得到:
Date Users
2015-03-01 47
2015-04-01 72
2015-05-01 123
2015-06-01 132
2015-07-01 136
2015-08-01 166
2015-09-01 129
2015-10-01 189
我希望数据以 45 天为间隔。类似的东西:-
Date Users
2015-03-01 85
2015-04-15 157
2015-05-30 192
2015-07-14 229
2015-08-28 210
2015-10-12 294
更新:
我使用以下方法获取输出,但仍然存在一个问题。我得到的值是偏移的。
with
new_window as (
select
generate_series as cohort
, lag(generate_series, 1) over () as cohort_lag
from
(
select
*
from
generate_series('2015-03-01'::date, '2016-01-01', '45 day')
)
t
)
select
--cohort
cohort_lag -- This worked. !!!
, count(*)
from
new_window
join users on
user_timestamp <= cohort
and user_timestamp > cohort_lag
group by 1
order by 1
但我得到的输出是:
Date Users
2015-04-15 85
2015-05-30 157
2015-07-14 193
2015-08-28 225
2015-10-12 210
基本上2015-03-01显示的用户应该是2015-03-01和2015-04-15之间的用户,以此类推。
但我似乎正在更新用户的价值。即:最多 2015-04-15 用户 85。这不是我想要的结果。 这里有什么帮助吗?
【问题讨论】:
-
你能给我看看你想要的结果吗?
-
显示示例输入及其预期输出
-
最新编辑解决了我的问题。感谢大家的帮助。
标签: postgresql