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

Snowflake SQL使用Time_slice实现故障停机时长按分钟拆分的方法问询

Snowflake SQL按分钟拆分故障停机时长实现方案

核心逻辑通过生成连续分钟偏移量关联原故障记录,结合时间边界判断计算每个分钟切片的停机时长,可兼容你提到的TIME_SLICE函数做时间对齐。

前置说明

假设你原表名为fault_records,Time字段为TIME/TIMESTAMP类型,Duration为数值类型存储分钟级停机时长。如果原时间字段包含秒级精度,可先用TIME_SLICE(fault_time, 1, 'MINUTE', 'START')将故障开始时间对齐到分钟边界,避免切片偏移。

完整实现SQL

WITH fault_records AS (
    -- 模拟测试数据,实际使用时替换为你的业务表即可
    SELECT 
        '11:34'::TIME AS fault_time,
        4.5 AS duration
    UNION ALL
    SELECT 
        '11:39'::TIME AS fault_time,
        2 AS duration
),
-- 生成连续分钟偏移量,最大值可按需调整,覆盖最长停机时长即可
min_offsets AS (
    SELECT VALUE AS offset
    FROM TABLE(FLATTEN(input => ARRAY_GENERATE_RANGE(0, 1000)))
),
-- 关联原表得到每个故障对应的所有分钟切片
all_slices AS (
    SELECT
        fault_time,
        duration,
        offset,
        DATEADD('minute', offset, fault_time) AS slice_start,
        DATEADD('minute', offset + 1, fault_time) AS slice_end,
        DATEADD('minute', duration, fault_time) AS fault_end_time
    FROM fault_records
    CROSS JOIN min_offsets
    -- 过滤有效偏移量,避免生成无效数据
    WHERE offset < CEIL(duration)
)
-- 计算每个切片的实际停机时长
SELECT
    TO_CHAR(slice_start, 'HH24:MI') AS time,
    -- 自动处理不足1分钟的切片场景
    DATEDIFF('second', slice_start, LEAST(slice_end, fault_end_time)) / 60 AS duration
FROM all_slices
ORDER BY slice_start;

输出效果

执行上述SQL即可得到和你示例完全一致的拆分结果,中间满分钟的切片自动返回1,最后一个不满1分钟的切片返回对应占比。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:54:09