You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MS SQL中如何计算指定日期单台机器各状态时长的占比

解决方法

你原有代码的问题是窗口函数未指定分区维度,导致分母用了全量数据的总时长,而非单台机器单日的总时长,调整窗口函数的分区规则即可,修改后的SQL如下:

SELECT 
    machine, 
    start_date, 
    SUM(duration) AS status_duration,
    SUM(duration) * 100.0 / SUM(SUM(duration)) OVER (PARTITION BY machine, start_date) AS Percentage,
    st.status_code, 
    st.status_text
FROM er_table er
LEFT JOIN status_table st ON er.status_code = st.status_code
WHERE machine IN ('mach1','mach2','mach3')
GROUP BY machine, start_date, st.status_code, st.status_text
ORDER BY machine, start_date, status_text

如果需要格式化百分比的小数位数,可以在外层包裹ROUND函数,比如保留两位小数就写成:

ROUND(SUM(duration) * 100.0 / SUM(SUM(duration)) OVER (PARTITION BY machine, start_date), 2) AS Percentage

内容的提问来源于stack exchange,提问作者schenker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:48:03