I have a table with columns id
,time
,value
STEP1: get the time value from the recent row
i.e SELECT time FROM tablename ORDER BY id desc LIMIT 1
STEP2: get all the rows who are within last 5 minutes from this time.
How can i do this
Advertisement
Answer
One method is a subquery:
x
SELECT t.*
FROM tablename t
WHERE t.time > (SELECT t2.time - INTERVAL '5 minute'
FROM tablename t2
ORDER BY id desc
LIMIT 1
);
If this is really not the most recent time and you want anything within five minutes, then moving the calculation to the FROM
clause is simpler:
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;
If you want the most recent time and anything within five minutes of that, you can use window functions as well:
SELECT t.*
FROM (SELECT t.*,
MAX(t.time) OVER () as max_time
FROM t
) t
WHERE t.time > max_time - INTERVAL '5 minute';