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

如何正确编写LAG函数?MySQL日期差计算报错求助

问题原因与解决办法

  1. 语法错误根源:Lag是MySQL的关键字,直接将它用作列别名会触发语法报错。解决方式有两种:

    • 用反引号包裹别名:AS \Lag``
    • 更换为非关键字别名,比如AS prev_date
  2. 逻辑错误修正:你的窗口分区条件PARTITION BY YEAR, MONTH, DAY完全不合理——这会把每个单独的日期拆成一个独立分区,导致LAG函数根本无法获取到上一行数据。要实现“获取上一行日期”的需求,应该去掉不必要的分区(如果不需要按特定维度分组),直接按完整日期排序:

修正后的基础SQL(解决语法+逻辑问题):

SELECT YEAR, MONTH, DAY,
       lag(DATE) OVER (ORDER BY DATE) AS prev_date
FROM DATASET;

如果需要按特定维度(比如年份)分组内获取上一行日期,可以调整分区条件:

SELECT YEAR, MONTH, DAY,
       lag(DATE) OVER (PARTITION BY YEAR ORDER BY DATE) AS prev_year_date
FROM DATASET;
  1. 扩展:计算日期天数差
    拿到上一行日期后,用DATEDIFF函数即可计算天数差:
SELECT YEAR, MONTH, DAY,
       DATE,
       lag(DATE) OVER (ORDER BY DATE) AS prev_date,
       DATEDIFF(DATE, lag(DATE) OVER (ORDER BY DATE)) AS day_diff
FROM DATASET;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:41:08