我需要为当前超过15分钟的所有行创建选择。
SELECT last_answer_date FROM messages WHERE last_answer_date > NOW() - INTERVAL '15 minutes';
当我在16:51:00开始选择时,我得到结果:
2019-01-17 16:25:00
换句话说,我的意思是:
给我所有行where last_answer_date > 16:51:00 - 15 minutes
(因为现在是16:51:00)
给我所有行`last_answer_date> 16:36:00(因为现在16:51:00-15分钟= 16:36:00)
我得到16:25:00
但16:25:00
<16:36:00
编辑:当我将>
更改为<
时,我得到了2019-01-16 17:50:27
EDIT2 :示例:
SELECT insert_date FROM smev_messages WHERE insert_date < NOW() - INTERVAL '15 minutes';
现在= 17:16
更改为SELECT insert_date FROM smev_messages WHERE insert_date > NOW() - INTERVAL '15 minutes';
17:17
答案 0 :(得分:2)
我认为您的时区可能有问题。
您可以使用show timezone;
进行检查
或者直接使用select now()
,看看它是否符合您的期望。
答案 1 :(得分:0)
如果您的大表中包含大量数据,则将出现一些性能问题,因为调用
NOW()-间隔'15分钟'在内部延迟后需要将您的间隔转换为日期 Postgress Interval
我认为一种更好的方法是您应该执行类似的操作以提高性能,因为所有日期都是长值,因此您应该像长值一样进行比较。
-- 15 minutes in millis = 900000
-- 15 minutes in secods = 900
-- Retrive all data inserted at latest 15 minutes
SELECT last_answer_date FROM messages WHERE (NOW() - last_answer_date) < 900;
-- Retrive all data inserted more than 15 minutes
SELECT last_answer_date FROM messages WHERE (NOW() - last_answer_date) > 900;