Reputation: 965
I have a Table, there are three column.
id, time and value
how can I get ervery Id is every 5 mins range only one data in Postgres?
ex:
id time value
1 03:11 test
1 07:13 test
1 12:11 test
2 02:11 test
2 07:11 test
This is my version, but only get by one hour...
select
distinct on("id")
"id",
time::time,
value
from (
select
"id",
time::time,
value,
dense_rank() over (
partition by "id"
order by
to_char(time,'HH')::int,
(
to_char(time,'MI')
)::int/5
)
from my_table
where time between '2018-07-03 00:00:00' and '2018-07-03 01:00:00' and "id" = 'XXXXX'
) as res
order by "id";
result:
id time value
1 03:05 14
but the result pose to be 10 rows.. maybe more
Upvotes: 1
Views: 302
Reputation: 244
Below query will produce the desired result.
with res(id,time,value,rnk) as ( select id, time, value, dense_rank() over ( partition by id order by to_char(time,'HH24'), ( to_char(time,'MI') )::int/5 ) from your_table ) select distinct on(id,rnk) id, to_char(time,'HH24:MI'), value from res order by id,rnk
Upvotes: 1