【问题标题】:Why don't LAG( ) and OVER( ) work in MySQL? [duplicate]为什么 LAG( ) 和 OVER( ) 在 MySQL 中不起作用? [复制]
【发布时间】:2022-01-06 18:43:21
【问题描述】:

我在下面有 SQL 代码。如果我从最后一个 SQL 语句中删除 , LAG(myNum, 1) OVER(ORDER BY id),我的代码就可以工作。如果我在最后一个 SQL 语句中继续使用LAG()OVER(),则会收到Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(ORDER BY id) from db001.myTable001' at line 1 的错误。任何想法如何解决?谢谢!

DROP TABLE IF EXISTS db001.myTable001;

CREATE TABLE IF NOT EXISTS db001.myTable001
    (id int, myDate VARCHAR(3), myNum int);

INSERT INTO db001.myTable001
    (id, myDate, myNum)
VALUES
    (1, 'Mon', 4),
    (2, 'Tue', 6),
    (3, 'Wed', 3);

SELECT * from db001.myTable001;

SELECT id, myDate, myNum as curNum, LAG(myNum, 1) OVER(ORDER BY id)
from db001.myTable001;

【问题讨论】:

  • 您使用的是什么版本的 MySQL?您需要运行 MySQL 8.0 或更高版本才能使用像 LAGLEAD 这样的窗口函数。 (有太多的商店仍在运行 MySQL 5.x...我敢打赌他们也在运行 PHP 4...)
  • 谢谢。我正在使用 MySQL57,现在我明白为什么了。

标签: mysql sql database window-functions lag


【解决方案1】:

LAG 是一个window function,MySQL 从版本 8 开始就支持它。

OVER 只是窗口函数附带的附加语法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-26
    • 2021-02-13
    • 2021-02-12
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    相关资源
    最近更新 更多