【问题标题】:Can anybody tell what's wrong in this mysql code?谁能告诉这个mysql代码有什么问题?
【发布时间】:2018-10-25 11:59:58
【问题描述】:
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;

错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 5 行的“(PARTITION BY user_id ORDER BY unix_timestamp) AS previous_time, RO”附近使用正确的语法
0.056 sec

【问题讨论】:

  • mysql版本是多少?
  • 我不认为这是 MySQL 语法(MySQL 中不存在 OVER 语句,只有 sql-server、postgre...)类似问题:stackoverflow.com/questions/6292679/… 编辑:您需要 MySQL 8 或更高版本
  • 你检查过你的MySQL是否支持OVER吗???这可能是您在此处发布之前应该检查的第一件事。

标签: mysql sql


【解决方案1】:

MySQL 仅支持从 8.0 版开始的窗口函数。相反,您可以这样做:

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;

为了提高性能,您需要在(user_id, unix_timestamp) 上建立索引。

【讨论】:

  • 是的,你是对的,窗口功能不适用于我正在使用的版本。谢谢。
  • 没有更好的办法吗?这似乎会超级慢。
  • @BenFarmer 。 . .适当的索引应该可以加快速度。但到现在为止,几乎每个人都应该使用 MySQL 8+。
猜你喜欢
  • 2021-09-06
  • 2011-09-03
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 2021-12-08
相关资源
最近更新 更多