2016-05-17 11 views
2

私はそれを実行している曜日によって異なる日付フィルタで同じビューを実行しようとしています。私が金曜日、土曜日、日曜日、または月曜日にクエリを実行する場合、日付は火曜日 - 木曜日にフィルタリングする必要があります。火曜日、水曜日、木曜日にクエリを実行すると、日付は金曜日にフィルタリングされます。これらは唯一の2つのシナリオです。私はPostgreSQLを使用しています。曜日に基づいて異なるフィルタを使用してクエリを実行するPostgreSQL

ビュー自体は、そうでない場合は非常に単純です:

select * from tbl_1 
where date between ____ and _____ 

私は私が参加することができ、日付テーブルを持っています。

(select date 
,case when day_of_week_iso IN(2, 3, 4) THEN 1 ElSE 4 END as "day" 
from tbl.date 
where date = current_date 
) dates 

答えて

0

現在の曜日を与える使用extract(dow from current_date)、参照Date/Time Functions and Operators(日曜日は0です):私のようなものを試してみました。

select * 
from tbl_1 
where case extract(dow from current_date) 
    when 2 then date between current_date- 4 and current_date- 1 
    when 3 then date between current_date- 5 and current_date- 2 
    when 4 then date between current_date- 6 and current_date- 3 
    when 5 then date between current_date- 3 and current_date- 1 
    when 6 then date between current_date- 4 and current_date- 2 
    when 0 then date between current_date- 5 and current_date- 3 
    when 1 then date between current_date- 6 and current_date- 4 
    end; 

あなたはコードを短くするために、独自の機能(複数可)を使用することができますが、すべてのケースでcaseの使用は単純で、おそらく高速です。

関連する問題