Объединить строки на основе схожих значений столбцов

Мне нужно обобщить таблицу, в которой есть эта информация: серийный номер, StartDate, EndDate, StatusID и TimeInState, мне нужно объединить строки, которые сохраняют один и тот же StatusId в течение непрерывного времени (EndDate строки такой же, как StartDate другого) , например, для этого случая:

Ввод

Мне нужно вывести что-то вроде этого:

Желаемый результат

Я еще не могу найти решение, так как думаю, что не могу использовать Group By, мне нужно объединить строки с определенным SerialNumber, когда StatusId не меняется в течение непрерывного времени.


person Javier Santiago Cáceres    schedule 25.02.2020    source источник
comment
Какие СУБД вы используете? (Что касается даты/времени, многие продукты далеки от совместимости с ANSI SQL.)   -  person jarlh    schedule 25.02.2020


Ответы (1)


Похоже, вы хотите group by:

select serialnumber, min(begintime), max(endtime), statusid, sum(timeinms)
from t
group by serialnumber, statusid;
person Gordon Linoff    schedule 25.02.2020
comment
Большое спасибо за ваш ответ!, но это дало бы мне общее время, которое было в этом StatuId?, что мне нужно, так это одна строка для каждого периода, который был во время statusId (например: с 13:00 до 16:00 это был статус = = 3 (1 строка), затем с 16:00 до 17:00 было statusId= 5 (еще одна строка), затем с 17:00 до 19:00 снова было statusId=3 (еще одна строка) ) - person Javier Santiago Cáceres; 25.02.2020
comment
@JavierSantiagoCáceres . . . Это соответствует данным, которые вы указали в своем вопросе, и, следовательно, отвечает на вопрос, который вы задали. Если у вас другой набор данных, задайте новый вопрос и объясните, какие правила вы используете. - person Gordon Linoff; 25.02.2020