У меня есть (гипотетическое) устройство, которое регистрирует события потребления своих батарей. Он имеет несколько слотов и ежедневно регистрирует процент потребления батареи в каждом слоте. Вот как выглядят данные:
CREATE TABLE batteries
(slot integer, day date, percentage integer);
INSERT INTO batteries
(slot, day, percentage)
VALUES
(0, '2020-05-08', 96),
(0, '2020-05-09', 96),
(0, '2020-05-10', 97),
(0, '2020-05-11', 97),
(0, '2020-05-12', 97),
(0, '2020-05-13', null),
(0, '2020-05-14', 95),
(0, '2020-05-15', 96),
(0, '2020-05-16', null),
(0, '2020-05-17', 1),
(0, '2020-05-18', 2),
(1, '2020-05-08', 10),
(1, '2020-05-09', 10),
(1, '2020-05-10', 10);
Журнал показывает, что в слоте 0
почти полностью разряженная батарея была заменена 13 мая на другую использованную батарею, которая затем была заменена на 16 мая по новой. Батарея в слоте 1
всегда сообщала об использовании 10%.
Мне нужно идентифицировать каждую отдельную батарею, последнее значение, которое она сообщила, а также первую и последнюю даты, когда она сообщила такое значение. Вот результат, который я пытаюсь получить:
slot min_date max_date percentage sequence
------------------------------------------------------
0 '2020-05-10' '2020-05-12' 97 0
0 '2020-05-15' '2020-05-15' 96 1
0 '2020-05-18' '2020-05-18' 2 2
1 '2020-05-08' '2020-05-10' 10 0
Последнее известное значение батареи 0
в слоте 0
было 97
, о котором сообщалось с 10 по 12 мая;
Последнее известное значение батареи 1
в слоте 0
было 96
, о котором сообщалось только 15 мая;
Последнее известное значение батареи 2
(текущее) в слоте 0
было 2
, о чем сообщалось только 18 мая;
Последнее известное значение батареи 0
(текущее) в слоте 1
было 10
, о чем сообщалось с 8 мая по 10 мая.
Моя основная проблема заключается в том, как получить минимальную и максимальную дату для каждой батареи, не имея идентификатора батареи. В этом примере, если я группирую по слоту и проценту для получения дат, я получу неправильную минимальную дату на батарее 1
слота 0
, потому что раньше в этом слоте была другая батарея с таким же процентом.
Можно ли получить этот результат по запросу SQL без постобработки?