iT邦幫忙

0

SQL每分鐘的值改為每小時的值

sql
ddx 2021-11-09 17:29:021022 瀏覽
  • 分享至 

  • xImage

https://ithelp.ithome.com.tw/upload/images/20211109/201392130WU1RGg7qP.png
這是我的資料
我希望能顯示
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才能算
這有點難,希望有大神可以幫我!

哈~其實看不懂工作時間是怎麼算出來的~有計算範例嗎?
ddx iT邦研究生 4 級 ‧ 2021-11-10 17:35:39 檢舉
樓下有人算出來了 就是他說的那個樣子沒錯,感謝囉:)
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
緯大啊緯大人
iT邦好手 1 級 ‧ 2021-11-10 08:08:36
最佳解答

我不知道有沒有理解錯,看了很久大概認為你的意思是這樣

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)

Demo

ddx iT邦研究生 4 級 ‧ 2021-11-10 17:35:06 檢舉

感恩~

我要發表回答

立即登入回答