数据表里按小时找出数据最大值
这是使用本地时间的情况
-- 使用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; -- 按本地时间倒序排列(最新数据在前)
扫描二维码推送至手机访问