当前位置:首页 > 码农资料 > 正文内容

数据表里按小时找出数据最大值

CCSSRW12小时前码农资料32

这是使用本地时间的情况

-- 使用CTE预处理数据,提高可读性和性能
WITH hourly_data AS (
    SELECT
        -- 格式化本地时间为YYYY-MM-DD HH:00(小时精度)
        strftime('%Y-%m-%d %H:00', local_time_column) AS local_hour,
        local_time_column,         -- 保留原始本地时间列用于核对
        temperature,               -- 温度值
        strftime('%H', local_time_column) AS hour_of_day  -- 提取小时部分用于昼夜判断
    FROM temperature_data
    WHERE 
        -- 筛选近3天的记录(基于本地时间)
        local_time_column >= datetime('now', '-3 days')
        AND temperature BETWEEN -20 AND 50  -- 过滤异常温度值
)
-- 主查询:按小时分组计算统计指标
SELECT
    local_hour,                  -- 本地时间(小时精度)
    MAX(temperature) AS max_temp,        -- 每小时最高温度
    MIN(temperature) AS min_temp,        -- 每小时最低温度
    ROUND(AVG(temperature), 2) AS avg_temp,  -- 每小时平均温度(保留两位小数)
    COUNT(temperature) AS data_points,   -- 每小时有效数据点数
    -- 判断昼夜时间段(6:00-18:00为白天,其余为夜间)
    CASE 
        WHEN hour_of_day BETWEEN '06' AND '18' THEN 'day'
        ELSE 'night' 
    END AS time_period,
    -- 计算温度波动范围(最高-最低)
    ROUND(MAX(temperature) - MIN(temperature), 2) AS temp_range,
    -- 标记温度异常等级(高温/低温/正常)
    CASE 
        WHEN MAX(temperature) > 30 THEN 'High'
        WHEN MIN(temperature) < 0 THEN 'Low'
        ELSE 'Normal'
    END AS temp_alert,
    local_time_column AS local_time  -- 保留原始本地时间
FROM hourly_data
GROUP BY 
    local_hour, hour_of_day  -- 按小时和昼夜分组(确保统计准确性)
ORDER BY 
    local_hour DESC;  -- 按本地时间倒序排列(最新数据在前)

如果日期数据是UTC时间则需要转换到本地时间

-- 使用CTE预处理数据,提高可读性和性能
WITH hourly_data AS (
    SELECT
        -- 将UTC时间转换为东八区时间(+8小时),格式化为YYYY-MM-DD HH:00
        strftime('%Y-%m-%d %H:00', utc_time_column, '+8 hours') AS local_hour,
        utc_time_column,           -- 保留原始UTC时间列用于核对
        temperature,               -- 温度值
        strftime('%H', utc_time_column, '+8 hours') AS hour_of_day  -- 提取东八区小时部分
    FROM temperature_data
    WHERE 
        -- 筛选近3天的记录(基于转换后的本地时间)
        datetime(utc_time_column, '+8 hours') >= datetime('now', '-3 days')
        AND temperature BETWEEN -20 AND 50  -- 过滤异常温度值
)
-- 主查询:按小时分组计算统计指标
SELECT
    local_hour,                  -- 东八区时间(小时精度)
    MAX(temperature) AS max_temp,        -- 每小时最高温度
    MIN(temperature) AS min_temp,        -- 每小时最低温度
    ROUND(AVG(temperature), 2) AS avg_temp,  -- 每小时平均温度(保留两位小数)
    COUNT(temperature) AS data_points,   -- 每小时有效数据点数
    -- 判断昼夜时间段(6:00-18:00为白天,基于东八区时间)
    CASE 
        WHEN hour_of_day BETWEEN '06' AND '18' THEN 'day'
        ELSE 'night' 
    END AS time_period,
    -- 计算温度波动范围(最高-最低)
    ROUND(MAX(temperature) - MIN(temperature), 2) AS temp_range,
    -- 标记温度异常等级(高温/低温/正常)
    CASE 
        WHEN MAX(temperature) > 30 THEN 'High'
        WHEN MIN(temperature) < 0 THEN 'Low'
        ELSE 'Normal'
    END AS temp_alert,
    utc_time_column AS utc_time  -- 保留原始UTC时间
FROM hourly_data
GROUP BY 
    local_hour  -- 按小时和昼夜分组(确保统计准确性)
ORDER BY 
    local_hour DESC;  -- 按本地时间倒序排列(最新数据在前)


扫描二维码推送至手机访问

本文链接:http://xinrui.ren/post/190.html

返回列表

上一篇:SQL多表查询重复列处理

没有最新的文章了...