选择查询以在3天前使用时间戳精确提取数据

问题描述:

我有创建时间戳列的数据库表。我想从当前时间戳之前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

只需使用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

如果您使用t-sql,您可以在WHERE阶段使用以下谓词。

DATEDIFF(日,列,SYSDATE)< = 3