我想抓取所有在ℕ個月前創建的記錄,完全相同的小時。 (的記錄年齡應該只有ℕ個月0天,0小時)獲取具有每月創建日期的記錄
ℕ= {1,2,...}
例如如果now()
是2016-11-15 13:15:00
,任何具有CREATE_DATE記錄如下預計被退回。
2010-11-15 13:15:00 -- different year
2016-02-15 13:15:00 -- different month
2016-11-15 13:46:23 -- different minute/seconds
2010-11-15 13:46:23 -- different year, month, minute and sec
最好簡單的查詢,我能想到的是這樣的:
SELECT *
FROM mytable
WHERE extract(day from age(now(), created_date)) = 0 -- same day any month ago
AND extract(hour from age(now(), created_date)) = 0; -- same hour
但問題是有,將被排除在查詢一些特定的日子。如當
created_date=2016-01-31 13:00:00
now() is 2016-02-28 13:00:00
在這種情況下
,記錄的年齡爲28 days
,而不是1個月;根據PostgreSQL中的age
函數。 所以它在2月底或3月1日都不會被提取。
任何有關如何以最簡單的方式解決這個問題的想法是讚賞的。
這裏是你可以用它來驗證一些測試數據:
create table mytable (created_date timestamp, expected_records int);
truncate mytable;
insert into mytable (created_date, expected_records) values
('2013-01-11 13:22:33', 2),
('2014-02-11 13:58:22', 2),
('2015-03-21 13:22:00', 1),
('2013-02-28 13:11:00', 5),
('2017-02-28 13:22:00', 5),
('2016-03-31 13:22:00', 5),
('2015-04-30 13:22:00', 5),
('2014-05-31 13:22:00', 5),
('2014-05-31 12:22:00', 1);
最終SELECT查詢可以在任何這些timstamps來執行,但應返回相同的行爲expected_records
狀態的量。 你也可以使用'some date'::timestamp
而不是現在()來僞造時間。
要確認,您正在計算日曆月,而不是30天等。 – toonice
正確。 @toonice我不算30天,我要N個月的記錄。 – Rahman
'2010-11-15 13:46:23'(不同的年份和分鐘/秒)被列出嗎? – toonice