我正在处理此查询并尝试选择在x小时内插入的所有记录
例如我有以下记录
A 2018-04-11 18:00:00
B 2018-04-11 19:00:00
C 2018-04-11 20:00:00
D 2018-04-11 21:00:00
当执行查询时间为21:15:00时,查询应该记录在执行查询的最后2小时内发生的记录。所以在这种情况下它应该返回:
21:00:00和20:00:00
这是我正在处理的查询,但它没有按预期工作,因为它只显示2条记录,即使有超过2条记录。
SELECT *
FROM posts p1
WHERE p1.created_at >= '2018-04-11 16:00:00'
AND exists
(
SELECT p2.id
FROM posts p2
WHERE p2.created_at <= '2018-04-11 17:00:00'
AND p2.created_at > p1.created_at
AND p2.created_at - p1.created_at < INTERVAL '1 HOUR'
AND p2.category_id = p1.category_id
AND p2.city_id = p1.city_id
AND p2.district_id = p1.district_id
AND p2.subcategory_id = p1.subcategory_id
)
AND p1.category_id = 3;
修改的
道歉,因为我的问题不清楚,我上面的查询之所以复杂,是因为我试图“聚集”我的记录。基本上我正在尝试获取相同类别的记录,这些记录发布在2小时时间范围内由不同用户发布的相同位置(相同的cityID)。
因此,当查询在21:00执行时,它应该返回来自同一位置的记录,该记录在同一类别上发布,同时“大致”发布。当我说“粗略”时,它基本上是试图获得在过去2小时内发布的帖子。
答案 0 :(得分:1)
当查询执行时间为21:15:00时,查询应该记录在执行查询的最后2小时内发生的记录。
你的查询似乎太复杂了。
也许我对你为什么不使用它感到困惑?
select p.*
from posts p
where p.created_at >= current_timestamp - interval '2 hour';
如果您打算使用自己的值,那么您可能需要:
select p.*
from posts p
where p.created_at >= '2018-04-11 16:00:00'::timestamp - interval '2 hour' and
p.created_at < '2018-04-11 16:00:00'::timestamp;
我认为将来无法创建帖子。如果您插入当前时间,则情况并非如此。