使用时间戳

时间:2017-10-08 18:45:24

标签: sql postgresql timestamp

我有db表创建了timestamp列。我想从postgress db获取所有记录,这些记录是在当前时间戳之前3天创建的。但是另一个约束是另一个名为 status 的列。由于PK是时间戳,状态和ID,因此可能存在多个状态并创建时间戳。我想只获取那些最后在当前时间戳之前3天插入的ID。 例如:

-----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是我想要获取的,因为最后一条记录是在当前时间戳之前3天准确插入的,但222不是我希望它被选中的那条,因为最后一个条目是在当前时间戳之前的一天插入的,尽管在3天前插入222的第一记录。 对不起,我无法在这里画出适当的表格

2 个答案:

答案 0 :(得分: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天前”意味着从那时起已经过了两个午夜。可以根据其他定义轻松调整逻辑。

答案 1 :(得分:0)

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

  

DATEDIFF(日,列,sysdate)&lt; = 3