Не совсем понятен принцип группировки. Предположим:
Если таблица - диагональная матрица, то после ответа на последний вопрос (s_4 - не пусто), начинается новая группа.
Посмотрите пример:
-- test data
create table test (id int,fdate date,s_1 varchar(10),s_2 varchar(10)
,s_3 varchar(10),s_4 varchar(10));
insert into test values
( 1,'2023-01-01','Да' ,null,null,null)
,( 2,'2023-01-01',null,'Нет',null,null)
,( 3,'2023-01-01',null,null,'Да',null)
,( 4,'2023-01-01',null,null,null,'Да')
,( 5,'2023-01-01','Да',null,null,null)
,( 6,'2023-01-01',null,'Да',null,null)
,( 7,'2023-01-01',null,null,'Нет',null)
,( 8,'2023-01-01',null,null,null,'Да')
,( 9,'2023-01-02','Да',null,null,null)
,(10,'2023-01-02',null,'Нет',null,null)
,(11,'2023-01-02',null,null,'Нет',null)
,(12,'2023-01-02',null,null,null,'Да')
-- еще дополнительно
,(21,'2023-01-02','Да',null,null,null)
,(22,'2023-02-02',null,null,null,'Да')
;
--query
select grn,min(id)id,min(fdate)
,max(s_1) s_1,max(s_2) s_2,max(s_3) s_3,max(s_4) s_4
from(
select *
,sum(cnt)over(order by id) grn
from(
select *
,case when lag(s_4,1,s_1)over(order by id) is not null then 1 else 0 end cnt
from test
)t1
)t2
group by grn
Результат такой
grn |
id |
mindate |
s_1 |
s_2 |
s_3 |
s_4 |
1 |
1 |
2023-01-01 |
Да |
Нет |
Да |
Да |
2 |
5 |
2023-01-01 |
Да |
Да |
Нет |
Да |
3 |
9 |
2023-01-02 |
Да |
Нет |
Нет |
Да |
4 |
21 |
2023-01-02 |
Да |
null |
null |
Да |
Колонки Id и fdate не имеют значения.