wypełnianie "luk"

0

Witam.

Czy da rade w zapytaniu wypełnić "luki" w danych?
Mam taką tabelkę:

id id_pracownika id_zadania czas_start czas_stop
1 1 1 10:00:00 10:32:00
2 1 4 11:00:00 11:20:00
3 1 3 12:00:00 12:32:00
4 1 7 13:00:00 13:11:00
5 2 1 10:00:00 11:20:00
6 2 4 12:00:00 13:00:00
7 2 2 15:00:00 17:00:00

Chciałbym w "raporcie" uzyskać coś takiego:
id_pracownika | id_zadania | czas_start | czas_stop | czas
1 | 1 | 10:00:00 | 10:32:00 | 00:32:00
1 | 0 | 10:32:00 | 11:00:00 | 00:28:00
1 | 4 | 11:00:00 | 11:20:00 | 00:40:00
1 | 0 | 11:20:00 | 12:00:00 | 00:40:00
1 | 3 | 12:00:00 | 12:32:00 | 00:32:00
1 | 0 | 12:32:00 | 13:00:00 | 00:28:00
1 | 7 | 13:00:00 | 13:11:00 | 00:11:00
2 | 1 | 10:00:00 | 11:20:00 | 01:20:00
2 | 0 | 11:20:00 | 12:00:00 | 00:40:00
2 | 4 | 12:00:00 | 13:00:00 | 01:00:00
2 | 0 | 13:00:00 | 15:00:00 | 02:00:00
2 | 2 | 15:00:00 | 17:00:00 | 02:00:00

czyli wypełnić czas między kolejnymi zadaniami, "przerwą" (o id 0).

Da radę to zrobić zapytaniem czy robić to po stronie klienta?

Z góry dziękuje.

1

@hipek wstydził byś się - takie proste :P

create table test2 (
  id_prac integer,
  id_zad integer,
  czas_start varchar(8),
  czas_stop varchar(8)
);

insert into test2 values (1, 1, '10:00:00', '10:32:00'), (1,	4,	'11:00:00',	'11:20:00'), (1,	3,	'12:00:00',	'12:32:00'), (1,	7,	'13:00:00',	'13:11:00');
insert into test2 values (2, 1, '10:00:00', '11:20:00'), (2,	4,	'12:00:00',	'13:00:00'), (2,	2,	'15:00:00',	'17:00:00');

select
  id_prac,
  id_zad,
  czas_start,
  czas_stop
from
  test2
union
select
  t1.id_prac,
  0 id_zad,
  t1.czas_stop czas_start,
  min(t2.czas_start) czas_stop
from test2 t1
  join test2 t2 on t1.id_prac = t2.id_prac and t2.czas_start > t1.czas_stop
  left join test2 t3 on t1.id_prac = t2.id_prac and t1.czas_stop = t3.czas_start
where
  t3.id_prac is null
group by
  t1.id_prac,
  t1.czas_stop
order by
  id_prac, czas_start

SQL.png

t3 jest po to aby wyeliminować powtórzenia kiedy czas końca poprzedniej równa się czas początku następnej

0

Wiem, że to proste, ale chciałem żeby ktoś się mógł wykazać ;).

A tak serio: dziękuje bardzo! Jakoś na to nie wpadłem ;).

1 użytkowników online, w tym zalogowanych: 0, gości: 1