我希望我的查询有一个动态日期。现在写的方式,我每次都要手动更改日期。请参阅以下示例:
(select*
from table2
where table2.begin_timestamp::date = '2015-04-01')as start
left outer join
(Select *
from table 1
where opened_at::date >= ('2015-04-01' - 15)
and opened_at::date <= '2015-04-01’)
我不想要2015-04-01&#39;要硬编码。我想一遍又一遍地运行这个查询。
答案 0 :(得分:0)
使用常规联接,您可以在on
子句或where
子句中执行此操作,但不能在子查询中执行此操作。这导致了这样的逻辑:
from (select*
from table2
) start left outer join
table 1
on opened_at::date >= table2.begin_timestamp::date - interval '15 day' and
opened_at::date <= table2.begin_timestamp::date
答案 1 :(得分:0)
我不是一名postgres开发人员,但我认为你可以调整一个名为“tally tables”的sql server世界的技术。
基本上你的目标是加入第d天和最多15天的窗口。
您可以使用类似
的内容SELECT * FROM generate_series('2015-04-01'::timestamp,
'2015-04-30 00:00', '1 days');
要生成日期序列,可以从那里编写类似
的内容select *
from table a
join generate_series('2015-04-01'::timestamp,'2015-04-30','1 days') s(o)
on a.begin_timestamp::date = s.o
join table2 b
on a.opened_at>= b.begin_timestamp::date - interval '15 days'
and opened_at::date <= table2.begintimestamp::date
基本上,您不是循环,而是使用间隔开始和范围结束之间的一系列日期来生成您所追求的结果。