2016-05-17 66 views
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)這給本週的當前日(星期日爲0),見Date/Time Functions and Operators

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; 

你可以使用自己的功能(S)縮短代碼,但所有案件中使用的case更簡單,可能更快。