mysql - Mysql获取加入/选择表的最新行(1:n)
问题描述
我有表“user”(主键是 id)和表“user_meta”(主键是 user_id 和 valid_from)。用户表包含基本用户数据,例如用户名、密码等。user_meta 包含可能更改的数据,例如姓氏、性别(是的,它的 2018 年:D)等。所以我有历史数据在哪一天有效。
我的问题是我尝试选择所有具有当前有效数据的用户,但我经常失败......
我怎样才能选择正确的数据?
对于一个用户,我可以简单地使用
"select * from user_meta
JOIN user on user_meta.user_id = user.id
ORDER BY valid_from DESC LIMIT 1"
但它如何与多个/所有用户一起工作?
问候,假
解决方案
您可以按用户对 max_valid 组的子选择使用连接
select * from user_meta
inner join (
select user.id, max(user_meta.valid_from) max_valid
from user_meta
JOIN user on user_meta.user_id = user.id
group by user.id
) t on t.id= user_meta.user_id and t.max_valid = user_meta.valid_from
或更简单
select * from user_meta
inner join (
select user_meta.user_id, max(user_meta.valid_from) max_valid
from user_meta
group by user_meta.user_id
) t on t.user_id= user_meta.user_id and t.max_valid = user_meta.valid_from
推荐阅读
- css - 如何更改 MUI 输入下划线颜色?
- android - 如何使用 Mesibo 更改头像?
- django - 在 Django 1.11 admin 中创建新对象时评估只读字段
- python - 如何在 df.at 中通过一次迭代设置值多个位置
- c# - 如何在使用 Selenium 上传之前获取文件的大小
- sql - SQL Server 使用范围创建输出表
- android - 数据绑定:Android Studio 无法将视图模型类识别为类型值(无法解决符号问题)
- python - Python多处理对角化
- javascript - 如何在VUE js中从一个组件到另一个组件的动态更改数组
- ios - swift4:SWRevealViewController 中的后退按钮