【发布时间】:2018-11-23 19:00:17
【问题描述】:
考虑下表:
mysql> desc foo;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| created_at | datetime | NO | | NULL | |
| updated_at | datetime | NO | | NULL | |
+------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> desc bar;
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| foo_id | int(11) | NO | MUL | NULL | |
| status | varchar(255) | YES | | NULL | |
| created_at | datetime | NO | | NULL | |
| updated_at | datetime | NO | | NULL | |
+-----------------+--------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)
我想从 bar 表中获取最近更新的 foo_id 和状态,而 foo_id 也包含多个状态
我尝试了以下查询:
SELECT foo_id, status
FROM bar d1
WHERE d1.updated_at =
(SELECT MAX(d2.updated_at)
FROM bar d2
WHERE d1.foo_id = d2.foo_id)
GROUP BY foo_id
ORDER BY updated_at DESC;
在不同的机器上出现以下错误:
未处理的拒绝 SequelizeDatabaseError:SELECT 的表达式 #2 列表不在 GROUP BY 子句中并且包含非聚合列 'dev.d1.status' 在功能上不依赖于列 GROUP BY 子句;这与 sql_mode=only_full_group_by 不兼容
如何从 bar 表中获取每个 foo_id 的最新状态?
【问题讨论】:
-
你可以去掉 group by 子句
-
为什么需要它?您能否改用
AFTER UPDATE触发器?
标签: mysql sql node.js sequelize.js