У меня есть таблица и строки, как показано ниже минимального образца. Я хочу более разумный способ получить ожидаемые результаты. У кого-нибудь есть хорошая идея?
create table foo (
id int,
s datetime,
e datetime,
value float
);
insert foo values
(1, '2019-1-1 1:00:00', '2019-1-1 3:00:00', 10.0),
(1, '2019-1-1 1:30:00', '2019-1-1 3:00:00', 10.0),
(1, '2019-1-1 4:00:00', '2019-1-1 5:00:00', 10.0),
(1, '2019-1-1 4:30:00', '2019-1-1 6:00:00', 10.0),
(2, '2019-1-1 2:00:00', '2019-1-1 6:00:00', 15.0),
(2, '2019-1-1 2:00:00', '2019-1-1 6:00:00', 10.0);
Я хочу получить такие результаты.
1, '2019-1-1 1:00:00', '2019-1-1 3:00:00', 10.0
1, '2019-1-1 4:00:00', '2019-1-1 6:00:00', 10.0
2, '2019-1-1 2:00:00', '2019-1-1 6:00:00', 15.0
У них более длинный период, объединенные s и e, которые будут более длинным периодом, и большее значение, чем у строк с перекрывающимися периодами.
Дополнительная информация
Я думал, что «умный путь» легче понять (например, чем меньше подзапросов, тем лучше) и быстрее выполнять.
На самом деле, у меня есть дополнительный столбец географии Point для таблицы «foo» в примере кода, и мне нужно выбрать точку из строки с самым низким «значением» в той же группе периодов времени. Я однажды подумал о своей логике. Я понятия не имею, чтобы получить результат без многих подзапросов или курсора. Поэтому я хотел сделать мою проблему более простой, чтобы получить представление об этом деле.