Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在plpgsql中写入时间\桶\间隙填充选项_Sql_Postgresql_Time Series_Plpgsql - Fatal编程技术网

是否可以在plpgsql中写入时间\桶\间隙填充选项

是否可以在plpgsql中写入时间\桶\间隙填充选项,sql,postgresql,time-series,plpgsql,Sql,Postgresql,Time Series,Plpgsql,我最近在一个postgresql数据库中发现了一系列事件, 我想询问他们每月的活动数量,其中 我想填补日期空白,比如如果没有活动,我希望仍然有一行 我现在可以用一堆生成序列来完成这项工作,然后左键连接我的数据,然后再次合并我的所有列。。。 我看起来不太漂亮,而且很难阅读和生成 我偶然发现了时间刻度的时间刻度,发现它非常好, 我想知道是否可以在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'
并且创建了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;