是否可以在plpgsql中写入时间\桶\间隙填充选项
我最近在一个postgresql数据库中发现了一系列事件, 我想询问他们每月的活动数量,其中 我想填补日期空白,比如如果没有活动,我希望仍然有一行 我现在可以用一堆生成序列来完成这项工作,然后左键连接我的数据,然后再次合并我的所有列。。。 我看起来不太漂亮,而且很难阅读和生成 我偶然发现了时间刻度的时间刻度,发现它非常好, 我想知道是否可以在plpgsql中写下它,或者它是特定于扩展的。 我知道我可以做一个函数,可以返回一组,但不确定如何开始 还是有比这更整洁的选择 选择 合并开始,勾选::日期, 聚结,0, 聚结,0 从选择生成_系列'2020-01-01'::日期,现在::日期,'1天'::间隔为刻度,0,0为刻度 左连接 选择 日期,创建为开始, 计数*过滤器,其中类型='X'为X, 从column='test'中的事件中,将TYPE='Y'为Y'的count*筛选器计数为Y 然后输入“X”,“Y” 并创建>='2020-01-01'是否可以在plpgsql中写入时间\桶\间隙填充选项,sql,postgresql,time-series,plpgsql,Sql,Postgresql,Time Series,Plpgsql,我最近在一个postgresql数据库中发现了一系列事件, 我想询问他们每月的活动数量,其中 我想填补日期空白,比如如果没有活动,我希望仍然有一行 我现在可以用一堆生成序列来完成这项工作,然后左键连接我的数据,然后再次合并我的所有列。。。 我看起来不太漂亮,而且很难阅读和生成 我偶然发现了时间刻度的时间刻度,发现它非常好, 我想知道是否可以在plpgsql中写下它,或者它是特定于扩展的。 我知道我可以做一个函数,可以返回一组,但不确定如何开始 还是有比这更整洁的选择 选择 合并开始,勾选::日期
并且创建了Postgres方法似乎没有那么麻烦:
select gs.yyyymm,
count(*) filter (e.type = 'X') as num_xs,
count(*) filter (e.type = 'Y') as num_ys
from generate_series('2019-01-01'::date, '2019-12-01':date, interval '1 month'
) gs(yyyymm) left join
events e
on e.column = 'test' and
e.type in ('X', 'Y') and
e.created >= gs.yyyymm and
e.created < gs.yyyymm + interval '1 month'
group by gs.yyyymm
order by gs.yyyymm;
这似乎并不特别复杂。我真的不知道用函数包装它会如何简化它。ARG谢谢,我忘记了做这件事的方法/o\shumb。无论如何,你可以避免连接部分。。。不是更好,但还是更好。。。仍然对回应感兴趣,比如有可能吗
select gs.yyyymm,
count(*) filter (e.type = 'X') as num_xs,
count(*) filter (e.type = 'Y') as num_ys
from generate_series('2019-01-01'::date, '2019-12-01':date, interval '1 month'
) gs(yyyymm) left join
events e
on e.column = 'test' and
e.type in ('X', 'Y') and
e.created >= gs.yyyymm and
e.created < gs.yyyymm + interval '1 month'
group by gs.yyyymm
order by gs.yyyymm;