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


