有人能说出mysql代码中的错误吗?

有人能说出mysql代码中的错误吗?,mysql,sql,Mysql,Sql,错误代码:1064。您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在第50.056行中使用“按用户划分\u id按unix排序\u时间戳作为上一个\u时间,RO” MySQL只支持从8.0版开始的窗口函数。相反,您可以执行以下操作: SELECT user_id, unix_timestamp, LAG(unix_timestamp,1) OVER (PARTITION BY user_id ORDER BY unix_tim

错误代码:1064。您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在第50.056行中使用“按用户划分\u id按unix排序\u时间戳作为上一个\u时间,RO”


MySQL只支持从8.0版开始的窗口函数。相反,您可以执行以下操作:

SELECT 
    user_id, 
    unix_timestamp, 
    LAG(unix_timestamp,1) OVER (PARTITION BY user_id ORDER BY unix_timestamp) 
    As Previous_time
FROM mydb.query_one
LIMIT 5;

为了提高性能,您需要一个关于用户id、unix时间戳的索引。

什么是mysql版本?我不认为这是mysql语法OVER语句在mysql中不存在,只有sql server、postgre。。。类似问题:编辑:您需要MySQL 8或更高版本。您是否检查过您的MySQL支持是否超出范围????这可能是你在发布之前首先要检查的。是的,你是对的,窗口功能对我使用的版本不起作用。谢谢。没有更好的办法吗?这看起来会非常慢。@BenFarmer。一个合适的索引应该可以加速它。但是现在,几乎每个人都应该使用MySQL 8+。
SELECT qo.user_id, qo.unix_timestamp, 
       (SELECT MAX(qo2.unix_timestamp) 
        FROM mydb.query_one qo2
        WHERE qo2.user_id = qo.user_id AND qo2.unix_timestamp < qo.unix_timestamp
       ) as Previous_time
FROM mydb.query_one
LIMIT 5;