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

MySQL使用LAG()和OVER()函数报错1064是什么原因?如何修复?

问题原因

你遇到的1064语法错误是因为当前使用的MySQL版本低于8.0,LAG()这类窗口函数、以及配套的OVER()语法是MySQL 8.0版本才正式新增的特性,5.7及更早的MySQL版本完全不支持该语法,所以执行时会把OVER识别为非法关键字,抛出语法错误。

修复方案

方案1:升级MySQL版本(最推荐)

直接将MySQL服务升级到8.0及以上版本,升级完成后你原本写的SQL不需要做任何修改即可正常运行,执行最后一条查询语句返回的结果如下:

idmyDatecurNumLAG(myNum, 1) OVER(ORDER BY id)
1Mon4NULL
2Tue64
3Wed36

方案2:兼容低版本MySQL的替代写法

如果暂时无法升级MySQL版本,可以用以下两种写法实现和LAG()完全一致的效果:

  • 自连接实现(适合id连续递增的场景)
SELECT 
  a.id, 
  a.myDate, 
  a.myNum as curNum, 
  b.myNum as lag_myNum
FROM db001.myTable001 a
LEFT JOIN db001.myTable001 b 
  ON a.id = b.id + 1
ORDER BY a.id;
  • 用户变量实现(不受id连续性限制)
SELECT 
  id, 
  myDate, 
  myNum as curNum, 
  @prev_num as lag_myNum,
  @prev_num := myNum
FROM db001.myTable001, (SELECT @prev_num := NULL) init
ORDER BY id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:36:03