我有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的第一记录。 对不起,我无法在这里画出适当的表格
答案 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