postgresql:如何在where子句中使用变量(行的某个列值)

桑托什

我有一个表列idtimevalue

STEP1:获取最近一行的时间值

IE SELECT time FROM tablename ORDER BY id desc LIMIT 1

STEP2:获取此时间后5分钟内的所有行。

我怎样才能做到这一点

戈登·利诺夫

一种方法是子查询:

SELECT t.*
FROM tablename t
WHERE t.time > (SELECT t2.time - INTERVAL '5 minute'
                FROM tablename t2
                ORDER BY id desc
                LIMIT 1
               );

如果这确实不是最近的时间并且您希望在五分钟内得到任何结果,那么将计算移至FROM子句会更简单:

SELECT t.*
FROM tablename t CROSS JOIN
     (SELECT t2.time - INTERVAL '5 minute'
      FROM tablename t2
      ORDER BY id desc
      LIMIT 1
     ) last_row
WHERE t.time > last_row.time - INTERVAL '5 minute' AND
      t.time <= last_row.time;

如果您想要最近的时间以及五分钟内的任何内容,您也可以使用窗口函数:

SELECT t.*
FROM (SELECT t.*,
             MAX(t.time) OVER () as max_time
      FROM t
     ) t
WHERE t.time > max_time - INTERVAL '5 minute';

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章