PostgreSQL查询:筛选started_at与now()时间差≥300秒的数据
调整PostgreSQL查询以筛选时间差≥300秒的数据
嘿,我来帮你把这条查询调整到符合需求~你现在的语句已经算出了started_at到当前时间的秒数差,但还缺了筛选这个差值≥300秒的条件,我给你两种实现方式,选你觉得顺手的就行:
方式一:直接用秒数计算筛选
这种方式和你原来的计算逻辑保持一致,只是在WHERE子句里补上时间差的判断:
SELECT id, (extract(epoch from now()) - extract(epoch from started_at)) AS completed_time FROM run_item WHERE started_at IS NOT NULL AND completed_at IS NULL AND (extract(epoch from now()) - extract(epoch from started_at)) >= 300;
方式二:用时间间隔比较(更易读)
PostgreSQL支持直接对时间差和INTERVAL类型做比较,写法更直观,还能避免重复计算:
SELECT id, EXTRACT(EPOCH FROM (NOW() - started_at)) AS completed_time FROM run_item WHERE started_at IS NOT NULL AND completed_at IS NULL AND (NOW() - started_at) >= INTERVAL '300 seconds';
小补充:
- 两种方式都能得到你要的结果,第二种用
NOW() - started_at直接生成时间间隔,再和INTERVAL '300 seconds'对比,可读性更强,后续维护也方便——比如要改成筛选5分钟以上的数据,直接把条件改成>= INTERVAL '5 minutes'就行。 - 我给计算出来的列加了
AS completed_time的别名写法,这是更规范的SQL语法,能避免一些潜在的解析问题。
内容的提问来源于stack exchange,提问作者user3095193
相关产品推荐
相关产品推荐

