Zapytanie MsSQL

0

Cześć, mam problem z pewnym zapytaniem, ale zacznijmy od początku. Sterownik maszyny zbiera dane o jej przerwach (czasie i ilości), są one segregowane wg kilku kategorii. Wysyła je bazy co jakiś krótki okres czasu. Na koniec zmiany (6-14,14-22,22-6) resetuje swój wewnętrzny licznik i zaczyna od zera. Potrzebuję zsumować przestoje z kilku dni z rozdzieleniem na kategorię postoju i zmianę. Z racji że licznik sterownika sam sumuje czas i ilość, najlepiej wyciągnąć MAX z zakresu zmiany. Inaczej mówiąc:
http://wklej.to/9gcTp
Potrzebuję zsumować wartości "-this 1" jako zmiana 1, "- this 2" jako zmiana 2, "- this 3" jako zmiana 3.

Ps. oczywiście this x hest tylko żeby wskazać jakie wiersze trzeba zsumować ;)

0

Zakłądając, że dane wylądują w takiej tabeli:

CREATE TABLE foo
(
	Machine int, 
	time100 int,
	num100 int,
	time200 int, 
	num200 int,
	Data DateTime  
)

Najłatwiej dopisać kolumnę ze zmianą:

SELECT *, 
ZMIANA=CASE 
WHEN (DATEPART(HOUR, DATA)>=6 AND DATEPART(HOUR, DATA)<14) THEN 1 
WHEN (DATEPART(HOUR, DATA)>=14 AND DATEPART(HOUR, DATA)<22) THEN 2 
WHEN (DATEPART(HOUR, DATA)>=22 OR DATEPART(HOUR, DATA)<6) THEN 3
END  
FROM foo

i użyć jej w grupowaniu:

SELECT DATA, ZMIANA, MAX(NUM100) [num_100],  MAX(TIME100) [time_100], MAX(NUM200) [num_200], MAX(TIME200) [time_200] from
(
SELECT DATA= CONVERT(date, data), NUM100, TIME100, NUM200, TIME200,
ZMIANA=CASE 
WHEN (DATEPART(HOUR, DATA)>=6 AND DATEPART(HOUR, DATA)<14) THEN 1 
WHEN (DATEPART(HOUR, DATA)>=14 AND DATEPART(HOUR, DATA)<22) THEN 2 
WHEN (DATEPART(HOUR, DATA)>=22 OR DATEPART(HOUR, DATA)<6) THEN 3
END  FROM FOO) x
GROUP BY ZMIANA, DATA

190446b58a.png

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