我需要检查上一条记录的元素,以确保我查询的日期不在结束日期和开始日期前 7 天之间的特定范围内。我有以下代码:
create or replace function eight (date) returns text as $$
declare
r record;
checkDate alias for $1;
begin
for r in
select * from periods
order by startDate
loop
if (checkDate between r.startDate and r.endDate) then
return q3(r.id);
elsif (checkDate between (r.startDate - interval '7 days') and r.startDate) then
return q3(r.id);
elsif (checkDate between (lag(r.endDate) over (order by r.startDate)) and (r.startDate - interval '8 days')) then
return q3(r.id);
end if;
end loop;
return null;
end;
$$ language plpgsql;
所以基本上,我需要检查以下内容:
如果查询日期在开始日期和结束日期之间
如果查询日期是开始日期开始前 7 天
如果查询日期在结束日期和开始日期之间,则返回与该日期关联的 id。
在大多数情况下,我的函数似乎工作正常,但有些情况似乎给了我 0 个结果(当应该总是有 1 个结果时)我的函数中是否缺少某些东西?我对最后一个 if 语句持怀疑态度。也就是说,尝试从以前的记录结束日期检查到当前记录的开始日期(间隔 7 天)
编辑:没有日期重叠。