I'm trying to find an answer about what is the most efficient way to get first element and last element in given time interval. I have a table interval_data
(includes like iot data) which has relation with device
table. I want to get a result for each device's first and last element.
Interval Data Table:
id device_id created_at value
15269665 1000206 2018-07-21 00:10:00 5099.550000
15270533 1000206 2018-07-21 00:20:00 5099.610000
15271400 1000206 2018-07-21 00:30:00 5099.760000
15272269 1000206 2018-07-21 00:40:00 5099.850000
15273132 1000206 2018-07-21 00:50:00 5099.910000
15274040 1000206 2018-07-21 01:00:00 5099.970000
15274909 1000206 2018-07-21 01:10:00 5100.030000
15275761 1000206 2018-07-21 01:20:00 5100.110000
15276629 1000206 2018-07-21 01:30:00 5100.160000
15277527 1000206 2018-07-21 01:40:00 5100.340000
15278351 1000206 2018-07-21 01:50:00 5100.400000
15279219 1000206 2018-07-21 02:00:00 5100.450000
15280085 1000206 2018-07-21 02:10:00 5100.530000
15280954 1000206 2018-07-21 02:20:00 5100.590000
15281858 1000206 2018-07-21 02:30:00 5100.640000
15282724 1000206 2018-07-21 02:40:00 5100.750000
15283627 1000206 2018-07-21 02:50:00 5100.870000
15284495 1000206 2018-07-21 03:00:00 5100.930000
... ... ... ...
I tried some queries like:
select created_at, value from interval_data i inner join
(select min(created_at) minin, max(created_at) maxin, d.device_id from device
d
inner join interval_data i on i.device_id = d.device_id
where d.device_id in (1000022, 1000023, 1000024)
and i.created_at between '2018-01-01 00:00:00' and '2019-01-01 00:00:00'
group by d.device_id) s
on s.device_id = i.device_id and (s.minin = i.created_at or s.maxin =
i.created_at)
But when device number increases, response time takes a long time. Do you have any suggestion? How can I find each devices' first and last element faster?