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

MySQL/MariaDB中当前日期虚拟记录与预测记录去重方案咨询

上下文

我有一张图表,展示基于已发生记录和预测记录的两组累计值时间序列。
同一日期可能有多条记录,它们的值会被汇总到daily_value列中。
预测累计值的时间序列会延续已记录的时间序列至当前时间。


需求

为了保证“历史”与“预测”时间序列之间的图形连续性,需要为当前日期(如下例中的2025-03-18)生成一条虚拟记录,其daily_value为0,不会改变累计值。

{"serie":"2025 measured","date":"2025-03-17","daily_value":"100","cumulative":"1200"},
{"serie":"2025 measured","date":"2025-03-18","daily_value":"50","cumulative":"1250"},
{"serie":"2025 forecast","date":"2025-03-18","daily_value":"0","cumulative":"1250"},
{"serie":"2025 forecast","date":"2025-03-18","daily_value":"100","cumulative":"1350"},
{"serie":"2025 forecast","date":"2025-03-31","daily_value":"500","cumulative":"1850"},

该方案仅在当前日期无已存在的预测记录时有效。


问题:同一日期的虚拟记录与预测记录冲突

如果当前日期已存在预测记录,绘图库(dimplejs)会将两条记录(虚拟和预测)的值相加,表现得像直方图一样,而非仅绘制后者。这是由dimplejs的设计及我的使用方式导致的。
基于上述示例数据,2025-03-18当天,预测时间序列使用的值为2600(即1250 + 1350),而非预期的1350。这会导致“跳变”,使预测值序列无法与已记录值序列衔接。
(图示:已记录和待生成的累计值序列出现跳变)


生成序列的查询语句

以下是用于提取记录的MySQL/MariaDB查询语句。
第一个UNION之前的代码部分提取已记录值。
第二个UNION之前的SELECT语句生成虚拟记录。
第二个UNION之后的代码提取预测值。

SELECT d.serie,d.date,daily_value,
       @summed_values_2025:= (@summed_values_2025 + d.daily_value) AS cumulative
FROM 
  (SELECT
    CONCAT(YEAR(date),' measured') AS serie,
  DATE(date) AS date,
  SUM(measurement) AS daily_value
  FROM measurements_2025
  GROUP BY date) d
  JOIN (SELECT @summed_values_2025:=0) c  
UNION
SELECT d.serie,d.date,daily_value,
       @summed_values_2025 + (@summed_values_forecast:= @summed_values_forecast +d.daily_value) AS cumulative
FROM
  (
  SELECT
    CONCAT(YEAR(CURDATE()),' forecast') AS serie,
    CURDATE() AS date,
    0 AS daily_value
 UNION
  SELECT
    CONCAT(YEAR(date),' forecast') AS serie,
    DATE(date) AS date,
    SUM(value) AS daily_value
    FROM forecasts_2025 WHERE date >= CURDATE()
    GROUP BY date
   ) d
  JOIN (SELECT @summed_values_forecast:=0) c
ORDER BY year ASC, date ASC

(注:原SQL存在语法错误,已修正括号位置)


咨询

是否有优雅的方式对当前日期的虚拟记录与预测记录进行去重?可选思路如下:

  • 是否应将虚拟记录移至末尾,并在第一个UNION后对date列使用SELECT DISTINCT?
  • 是否有其他方式修改SQL查询以实现“内联”去重?
  • 或者在结果后处理中,若当前日期已有预测值则删除虚拟记录会更好?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:47:07