MySQL - Operacje na zmiennych TIME

0

Mam mały problem z bazą danych na MySQL'u:

Mam tabele która przechowuje długość trwania pewnego procesu w postaci godziny rozpoczęcia i zakończenia. W jaki sposób zsumować łączny czas wykonywania jakiejś czynności:

Struktura tabeli :

CREATE TABLE akcja
(
	akcja_id  INT UNSIGNED  NOT NULL AUTO_INCREMENT,
	proces_id  INT UNSIGNED  NOT NULL,
	data  DATE  NOT NULL,
	godzina_p  TIME  NOT NULL,
	godzina_k  TIME  NOT NULL,

PRIMARY KEY (akcja_id),
INDEX (proces_id),
FOREIGN KEY (proces_id) REFERENCES proces(proces_id) ON UPDATE NO ACTION ON DELETE NO ACTION
)  TYPE=INNODB;

Przykładowe dane :

akcja_id	proces_id	data		godzina_p	godzina_k
1		1		2005-07-11	02:30:00	21:00:00
2		2		2005-07-11	15:00:00	15:15:00
3		1		2005-07-15	05:00:00	16:15:00
4		1		2005-07-16	23:15:00	08:15:00
5		2		2005-07-20	23:45:00	00:00:00

1)Jak uzyskać długość poszczególnych akcji tzn.:
akcja_id proces_id data czas
1 1 2005-07-11 1800
2 2 2005-07-11 0000
3 1 2005-07-15 1100
4 1 2005-07-16 0900
5 2 2005-07-20 0000

Gdy wykorzystam do tego funkcję SUBTIME lub TIMEDIFF :

SELECT akcja_id, proces_id, data, TIMEDIFF(godzina_k, godzina_p) 
FROM akcja;

to w przypadku przechodzenia przez godzinę 0000 zwraca NULL albo ujemną godzinę ??

2)Jak uzyskać łączny czas wykonywania poszczególnych procesów tzn.:
proces_id czas
1 3800
2 0000

0

Mam nadzieję, że będzie działać.

SELECT akcja_id, proces_id, data,
SEC_TO_TIME((TIME_TO_SEC(godzina_k)-TIME_TO_SEC(godzina_p)+24*3600) % (24*3600)) as czas
FROM akcja
0

Wielkie dzięki. Wszystko działa w jak należy :) . Całkiem sprytne podejście do tematu i wystarczy tylko zsumować czas w sekundach dla poszczególnych procesów i mam rozwiązany także drugi problem.

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