Обединете редове въз основа на подобни стойности на колони

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

Вход

Трябва да изведа нещо подобно:

Желан изход

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


person Javier Santiago Cáceres    schedule 25.02.2020    source източник
comment
Кои dbms използвате? (Когато става въпрос за дата/час, много продукти далеч не са съвместими с 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 часа беше status = 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