为什么在LAG()函数中出现语法错误?

时间:2019-09-05 15:36:14

标签: mysql

我进行了相当多的研究,无法找到为什么这行不通,请您帮忙?

我有一个数据库,该数据库具有名为“ tl_content”的表,其中具有名为“ id”,“ url”和“ title”的列。我试图为每一行获取上一行的网址。

似乎我应该使用函数LAG()来获得它。

这是我尝试的代码:

SELECT url, title, 
LAG(url) OVER (ORDER BY id)
FROM tl_content

但是我收到以下错误消息:“您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以在第3行的'(ORDER BY id)FROM tl_content'附近使用正确的语法。 “。

我看不出怎么回事。

预先感谢您的帮助。

史蒂芬妮。

1 个答案:

答案 0 :(得分:0)

我的猜测是您的MySQL版本不支持LAG,可能是因为它的版本早于8+。您可能可以使用相关子查询来完成与LAG相同的操作:

SELECT
    url,
    title,
    (SELECT url FROM tl_content t2 WHERE t2.id < t1.id
     ORDER BY t2.id DESC LIMIT 1) url_lag
FROM tl_content t1;

假设id列是唯一的(即,永远不会有重复的id值),此方法应该可以正常工作。如果您长期需要诸如LAG之类的分析功能,请考虑升级到MySQL 8 +。