2017-10-08 50 views
1

我有創建時間戳列的數據庫表。我想從當前時間戳之前3天創建的postgress數據庫獲取所有記錄。但這裏的另一個約束是另一列,名爲狀態。可能會有多個狀態並創建時間戳,因爲PK是時間戳,狀態和ID。我只想抓取剛剛在當前時間戳前3天插入的那些ID。 例如:選擇查詢以在3天前使用時間戳精確提取數據

-----id------------timestamp--------------------------status------------col3------ 
.....111...............2017-10-05 10:42:23..............A.......... 
.....111...............2017-10-05 12:42:23..............X.......... 
.....111...............2017-10-05 18:42:23..............X.......... 
.....222...............2017-10-05 11:42:23..............A.......... 
.....222...............2017-10-05 13:42:23..............X.......... 

.....222...............2017-10-07 18:42:23..............X.......... 

ID 111是我想要的獲取,因爲最後一個記錄插入當前時間戳記,但222之前正好3天不是我想作爲最後一個條目只是插入它被選中儘管在前3天插入222的第一個記錄,但在當前時間戳的前一天。 對不起,我不能夠得出正確的表在這裏

+0

你不澄清 「正是前3天」 的意思。我那到最近的微秒? –

+0

如果當前時間戳爲2017-10-08 19:42:23那麼前3天意味着2017-10-05 19:42:23 – user123475

回答

4

只需使用interval算術:

where created_timestamp < current_timestamp - interval '3 day' 

對於修訂後的問題,這似乎是這樣的:

select id 
from t 
group by id 
having max(timestamp) >= date_trunc('day', current_timestamp - interval '2 day') and 
     max(timestamp) < date_trunc('day', current_timestamp - interval '1 day'); 

這是「正好在3天前」的猜測意味着自那之後兩個中午過去了。對於其他定義,可以輕鬆調整邏輯。

+0

問題已更新 – user123475

0

如果您使用t-sql,您可以在WHERE階段使用以下謂詞。

DATEDIFF(日,列,SYSDATE)< = 3

相關問題