相同查询,不同结果

时间:2019-08-06 13:19:35

标签: mysql sql laravel mariadb

我每天都运行cron,并将记录保存在表中。编写查询以查看用户的日常进度,但遇到了问题。
我在本地和生产环境中有单独的数据库。

SELECT *, LAG(value) OVER(PARTITION BY node_id ORDER BY created_at) old_value
FROM ledger WHERE ledger_type_id = 1

这是查询失败的部分。我认为数据库驱动程序可以做一些事情。该查询正在从我的SQL客户端对prod数据库进行处理,但是我只是注意到它正在运行MySQL 8,并且prod db为10.3.16-MariaDB。 在我的本地数据库MySQL 5.7上尝试了相同的查询,并得到以下错误:

[2019-08-06 16:12:47] [42000][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 '(PARTITION BY node_id ORDER BY created_at) AS old_value

此后,我又进行了2次测试:

  1. 通过phpmyadmin在自己的产品服务器上运行查询,几分钟后服务器完全失效。
  2. 通过我的代码在生产环境(laravel 5.8)上查询:
DB::select(DB::raw('
    SELECT *, LAG(value) OVER(
    PARTITION BY node_id ORDER BY created_at
    ) old_value
    FROM ledger WHERE ledger_type_id = 1
'))

并在我的laravel日志中找到了它:

production.ERROR: SQLSTATE[42000]: Syntax error or access violation:
1140 Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is
illegal if there is no GROUP BY clause

我做错了什么吗?

0 个答案:

没有答案