我正在尝试创建一个3个月向前看类型表。因此,例如,任何last_day(event_date)='2021-01-01'
(即Jan-2021)的事件在2021年2月和2021年3月也是有效的。
对于每一个事件,我想在发生后的2个月内再排一次。以下示例:
给定如下所示的数据:
我想创建一些看起来像这样的东西:
有点纠结于如何实现这一点。您可以假设event_date
在这里是有效的datetime字段。我试过几种不同的方法都没有用。对于类似的情况,我通常使用窗口函数,这里有prefore
和follows
限制,但lead
和lag
类型函数只允许设置1个偏移量,而不允许设置偏移量范围。
感谢任何帮助。在psql工作。
您可以通过两个步骤完成此操作:
给出示例,第一步很简单,在更复杂的情况下,您可能使用group by
对数据进行分组,这里使用distinct
就足够了:
select distinct event_date, customer_id from table;
这是基础,每行生成的另外两个信息依赖于此数据。也许您可以为此创建一个视图并重用它。我将这样做,并将其称为view
,但您也可以直接使用SQL语句。将其视为view
等于select distinct event_date,customer_idfrom table
。
第二步可以通过添加下个月的数据和下个月的数据来完成。一个联盟浮现在脑海中。
select event_date, customer_id from view
UNION
select next_month(event_date), customer_id from view
UNION
select after_next_month(event_date), customer_id from view
现在我们剩下的是日期算术,你要计算下个月和下一个月。
如果您可以的话,我建议您只在日期上加上30,例如选择event_date+30,customer_id,从view
和选择event_date+60,customer_id,从view
。
否则,进行适当的日期算术应该不会太困难,请参阅日期/时间函数和运算符。