這是我的資料
我希望能顯示
DateTime | TagName | Value | 工作時間
2021-11-09 01:00:00 | KY-T1HIST.H-0113_CR | 14.131245 | 30
2021-11-09 02:00:00 | KY-T1HIST.H-0113_CR | 15.131245 | 45
.
.
.
每分鐘的Value會有NULL和負數和0
value的部分是要算那一小時大於0的值加起來除以工作時間
工作時間則是看那一分鐘的值大於0才能算
這有點難,希望有大神可以幫我!
我不知道有沒有理解錯,看了很久大概認為你的意思是這樣
11-09 00:00 凌晨12點,這一小時會有60個分鐘,有60列紀錄
DateTime | TagName | Value
2021-11-09 00:00:00 | KY-T1HIST.H-0113_CR | -2.44582
2021-11-09 00:01:00 | KY-T1HIST.H-0113_CR | 14.131245
2021-11-09 00:02:00 | KY-T1HIST.H-0113_CR | 14.445579
2021-11-09 00:03:00 | KY-T1HIST.H-0113_CR | -6.224785
.
.
2021-11-09 00:30:00 | KY-T1HIST.H-0113_CR | 0
.
.
2021-11-09 00:58:00 | KY-T1HIST.H-0113_CR | 14.627833
2021-11-09 00:59:00 | KY-T1HIST.H-0113_CR | 14.337829
你需要的是群組成以下
這60列當中,Value > 0 的列 數量 如上有 4 列,則工作時間=4
而群組過後的 Value 會等於這4列的平均
(14.131245 + 14.445579 + 14.627833 + 14.337829) / 4 = 14.3856215
也就是統整成
DateTime | TagName | Value |工作時間
2021-11-09 01:00:00 | KY-T1HIST.H-0113_CR | 14.3856215 | 4
是的話,以下SQL大約能群組成這樣
SELECT DATEPART(hour, DateTime) AS OnHour, AVG(Value) as value, Count(*) as 工作時間
FROM B
WHERE (DateTime >= '2021/11/09') AND (DateTime < '2021/11/10') AND Value>0
GROUP BY DATEPART(hour, DateTime)