2017-08-30 129 views
1

我一直在處理有關查詢created_at在當前或過去x周內的記錄問題。假設今天是星期三,那麼從星期一到午夜,直到現在,如果x = 1。如果x> 1,我正在尋找當前星期,直到今天或過去一週,但沒有使用常規因爲這會讓我在星期三到星期三得到我,而我只是在看「整個」周。從過去的x周獲取記錄

我試過了間隔解決方案,還有像WHERE created_at > (CURRENT_DATE - INTERVAL '5 week')這樣的東西。 這個解決方案適用於日,月,年等,因爲我實際上是通過其他後端邏輯構建查詢。

我正在尋找一個「找一個已經創造了一切的通用查詢‘X期’回


編輯:

自去年的時候,我已經在我的Ruby實現了這個on Rails應用程序。使用HOUR時,這已經引起了一些問題,其內置是一切,但HOUR(月,日和年)

SELECT "customer_uses".* 
FROM "customer_uses" 
WHERE (customer_uses.created_at > DATE_TRUNC('MONTH', TIMESTAMP '2017-09-17T16:45:01+02:00') - INTERVAL '1 MONTH') 

這在我的測試案例正確工作的工作。(車這個的數量)。 TIMESTAMP由DateTime.now生成,以確保我的測試用例使用「時間旅行」測試的時間覆蓋,因此不使用內置函數。

(我剝去了一些額外的WHERE-調用應該是不相關的)。

爲何小時不工作對我來說是一個謎,因爲我用它與的HOUR代替MONTH一個插線如上所示:

SELECT "customer_uses".* 
FROM "customer_uses" 
WHERE (customer_uses.created_at > DATE_TRUNC('HOUR', TIMESTAMP '2017-09-17T16:45:21+02:00') - INTERVAL '1 HOUR') 
+1

WHERE created_at>(CURRENT_DATE - INTERVAL'5 week')''有什麼問題?你是否在這裏要求幾個查詢,在任何時間段(例如,月,周)? –

+0

也許︰'where date_trunc('week',created_at)> date_trunc('week',current_date) - interval'5 week'' –

+0

我正在尋找使用周的開始。我想這個查詢會是「相同的」,因爲它會簡單地在'INTERVAL'5個月',正確的@TimBiegeleisen? –

回答

1

您當前建議的查詢幾乎是不錯,只不過它採用當前日期,而不是一週的開始:

SELECT * FROM your_table WHERE created_at > (CURRENT_DATE - INTERVAL '5 week') 

相反,我們可以檢查5周的時間間隔倒退,但是從目前的一週的開始:

SELECT * 
FROM your_table 
WHERE created_at > DATE_TRUNC('week', CURRENT_DATE) - INTERVAL '5 week'; 

我相信你應該能夠使用上述查詢作爲其他時間段的模板,例如,幾個月。只需更換DATE_TRUNC中的單位和WHERE條款的間隔。

+1

除了使用'HOUR'外,您的答案完美無瑕,我嘗試在應用中添加爲了使用日期時間並指定'DATE_TRUNC('hour',TIMESTAMP'....')',提供'CURRENT_DATE',但是這對HOUR不起作用,但對於DAY,MONTH *和* YEAR起作用。我現在已經接受了你的答案,因爲我沒有在原始答案中提及小時,而且這種方式很有魅力 –

+0

@FrederikSpang我讚賞upvote,但是如果你可以提供一些你原來的問題的數據,我很樂意看到它的一個問題 –

+0

會做,只是片刻 –