我有一个表列id
,time
,value
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] 删除。
我来说两句