前のレコードの要素をチェックして、クエリする日付が終了日から開始日の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日間のギャップがあります)
編集:日付が重なることはありません。