我每天都运行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次测试:
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
我做错了什么吗?