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

如何在MariaDB中为每日查询结果计算行间差值(Delta)

解决方案

你可以将现有获取每日第一条数据的查询作为子查询,在外层使用LAG()函数获取上一行的verbrauch_ges值,进而计算行间差值。

完整SQL语句

SELECT
  created_at,
  verbrauch_ges,
  verbrauch_ges - LAG(verbrauch_ges) OVER (ORDER BY created_at DESC) AS taglicher_verbrauch
FROM (
  -- 原有查询:获取每日第一条数据
  SELECT created_at, verbrauch_ges 
  FROM pv_metrics 
  GROUP BY DATE(created_at) 
  ORDER BY ID DESC
) AS daily_first
ORDER BY created_at DESC
LIMIT 20;

关键说明

  1. 子查询逻辑:保留你原有的筛选逻辑,获取每日的第一条数据。需要注意:在严格SQL模式下,GROUP BY DATE(created_at)搭配未聚合的created_at和verbrauch_ges可能返回不确定结果,更严谨的写法是用窗口函数明确获取每日最早写入的记录:
SELECT created_at, verbrauch_ges
FROM (
  SELECT
    created_at,
    verbrauch_ges,
    ROW_NUMBER() OVER (PARTITION BY DATE(created_at) ORDER BY created_at ASC) AS row_num
  FROM pv_metrics
) AS ranked
WHERE row_num = 1
ORDER BY created_at DESC
LIMIT 20;

将这段替换到外层查询的子查询中,能确保拿到的是每日最早的那条数据。

  1. LAG函数的作用:LAG(verbrauch_ges) OVER (ORDER BY created_at DESC)会按照日期倒序,获取当前行的上一行能耗值。用当前行数值减去上一行数值,得到的就是当日的能耗差值(taglicher_verbrauch)。

  2. 结果说明:最终结果会包含日期、当日初始能耗值,以及当日与前一日的能耗差值(第一行因无前置数据,差值会显示为NULL)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 17:33:21