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

MySQL实现单表每日参数差值拆分至多列的查询求助

实现多参数每日差值的列转行展示

表结构说明

有一张名为energymeter的表,包含三列:

  • Date:日期时间字段
  • Name:计量参数名称(字符串类型,对应3个不同参数)
  • Value:参数的实时数值

需求

在指定时间范围内,计算每个参数的每日最大值与最小值的差值,并将3个参数的差值分别展示为独立列。

当前单参数查询实现

已能通过以下SQL查询单个参数的每日差值:

select Date(Date) as Date,
       Max(Value) - Min(Value) as Value , 
       Name 
from energy_meter.energy_meter 
WHERE Name ='Energy_Meters\[1\].Total_active_energy_kWh' 
  And DATE(Date) between '2022-10-01'  and '2022-10-13' 
group by DATE(Date)

预期结果格式

希望结果以日期为行维度,每个参数的每日差值作为单独列,示例结构如下:

Date参数1差值参数2差值参数3差值
2022-10-0112.58.35.1
2022-10-0211.27.94.8
............

解决方案:条件聚合实现列转行

使用CASE WHEN结合聚合函数,针对每个参数单独计算当日差值,最终将结果转为多列:

SELECT 
    DATE(Date) AS Date,
    -- 第一个参数的每日差值
    MAX(CASE WHEN Name = 'Energy_Meters\[1\].Total_active_energy_kWh' THEN Value END) - 
    MIN(CASE WHEN Name = 'Energy_Meters\[1\].Total_active_energy_kWh' THEN Value END) AS Energy_Meter_1_Diff,
    -- 替换为第二个实际参数名
    MAX(CASE WHEN Name = 'Energy_Meters\[2\].Total_active_energy_kWh' THEN Value END) - 
    MIN(CASE WHEN Name = 'Energy_Meters\[2\].Total_active_energy_kWh' THEN Value END) AS Energy_Meter_2_Diff,
    -- 替换为第三个实际参数名
    MAX(CASE WHEN Name = 'Energy_Meters\[3\].Total_active_energy_kWh' THEN Value END) - 
    MIN(CASE WHEN Name = 'Energy_Meters\[3\].Total_active_energy_kWh' THEN Value END) AS Energy_Meter_3_Diff
FROM energy_meter.energy_meter 
WHERE DATE(Date) BETWEEN '2022-10-01' AND '2022-10-13'
GROUP BY DATE(Date)
ORDER BY Date;

说明

  1. 每个CASE WHEN子句筛选对应参数的当日数据,再通过MAX()和MIN()计算差值
  2. 需要将SQL中的参数名替换为实际存在的3个Name值
  3. 可根据需求自定义列别名(AS后的名称)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:45:36