mysql - 如何从表中获取每个 id 的最新状态?
问题描述
考虑下表:
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 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“dev.d1.status”;这与 sql_mode=only_full_group_by 不兼容
如何从 bar 表中获取每个 foo_id 的最新状态?
解决方案
如果您只想要 max updated_at 的 id,您可以使用
select foo_id, status
from bar
where updated_at = (
select MAX(updated_at)
from bar
)
或使用连接
select foo_id, status
from bar
INNER JOIN (
select MAX(updated_at) max_date
from bar
) t on t.max_date = bar.updated_at
推荐阅读
- python - 如何使用带有 preprocessing_function 的数据生成器正确加载图像?
- python - Telethon,给定要更改的单词,更改文本实体的偏移量和长度
- kotlin - 将对象变量公开为公共使其成员无法解析
- rest - 不同 HTTP 方法的目的?
- spring-boot - 为什么数据库Hibernate jpa中的employee_id和department_id不自动更新
- google-apps-script - 创建谷歌日历活动时无法更改组织者
- flutter - 如何使软键盘外观动画流畅?
- sql - 根据customer_no和plan计算一个字段的总和
- python - 为什么pysound输出空的wav文件?
- twitter-bootstrap - Bootstrap 5:文本框叠加和图像居中