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

如何合并MySQL查询获取同一列不同时段的SoC数据用于绘图?

合并MySQL查询获取每日两个时段的电池SoC数据

需要从luxpower表中提取每日约2点(午夜后≤120分钟)和7点(午夜后≤420分钟)的电池State of Charge(SoC)数据,合并成包含socama(2点时段)、socamb(7点时段)的单一结果集。

注意:原查询的潜在问题

你之前的两个查询直接用GROUP BY Date_MySQL但未指定聚合逻辑,同一日期可能有多条符合条件的记录,会导致返回的SoC值不确定。建议取每个时段内最接近目标时间的记录(即该时段内Minutes_Since_Midnight最大的那条),这样数据更准确。

方案一:条件聚合(简洁高效)

用CASE语句筛选对应时段的SoC,配合聚合函数取该时段的最新数据:

SELECT 
    Date_MySQL,
    -- 取每日0-2点内的最后一条SoC(最接近2点)
    MAX(CASE WHEN Minutes_Since_Midnight <= 120 THEN soc END) AS socama,
    -- 取每日0-7点内的最后一条SoC(最接近7点)
    MAX(CASE WHEN Minutes_Since_Midnight <= 420 THEN soc END) AS socamb
FROM luxpower
GROUP BY Date_MySQL
ORDER BY Date_MySQL;

如果某日期没有对应时段的数据,对应字段会返回NULL,适合需要保留所有日期的场景。

方案二:自连接获取精准时段数据

通过子查询分别获取两个时段的最新记录,再按日期关联:

SELECT 
    t1.Date_MySQL,
    t1.soc AS socama,
    t2.soc AS socamb
FROM 
    -- 获取每日0-2点内最接近2点的SoC记录
    (SELECT Date_MySQL, soc
     FROM luxpower l1
     WHERE Minutes_Since_Midnight = (SELECT MAX(Minutes_Since_Midnight)
                                     FROM luxpower l2
                                     WHERE l2.Date_MySQL = l1.Date_MySQL
                                       AND l2.Minutes_Since_Midnight <= 120)) t1
-- 用LEFT JOIN保留所有日期,即使7点时段无数据;用INNER JOIN则只保留两个时段都有数据的日期
LEFT JOIN 
    -- 获取每日0-7点内最接近7点的SoC记录
    (SELECT Date_MySQL, soc
     FROM luxpower l3
     WHERE Minutes_Since_Midnight = (SELECT MAX(Minutes_Since_Midnight)
                                     FROM luxpower l4
                                     WHERE l4.Date_MySQL = l3.Date_MySQL
                                       AND l4.Minutes_Since_Midnight <= 420)) t2
ON t1.Date_MySQL = t2.Date_MySQL
ORDER BY t1.Date_MySQL;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:43:11