在相关 table 中查找具有最大值的记录
Find record with maximum value in related table
如何获取每个用户最近创建的 user_password 的 USER_PASSWORD ID?
用户Table
USER_ID
USERNAME
1
USER1
2
USER2
3
USER3
USER_PASSWORD Table
ID
USER_ID
PASSWORD
CREATED
1
1
PASSWORD1
2020-01-01
2
1
PASSWORD2
2020-02-01
3
1
PASSWORD3
2020-03-01
4
2
PASSWORD4
2020-04-01
5
2
PASSWORD5
2020-05-01
6
2
PASSWORD6
2020-06-01
7
3
PASSWORD7
2020-07-01
8
3
PASSWORD8
2020-08-01
9
3
PASSWORD9
2020-09-01
目前我正在使用下面的草率查询
SELECT * FROM
(SELECT * FROM USER) USERS
JOIN (SELECT USER_ID, MAX(CREATED) MAX FROM USER_PASSWORD GROUP BY USER_ID) MAXPASSWORDS
ON USERS.USER_ID = MAXPASSWORDS.USER_ID
JOIN (SELECT * FROM USER_PASSWORD) PASSWORDS
ON USERS.USER_ID = PASSWORDS.USER_ID AND MAXPASSWORDS.MAX = PASSWORDS.CREATED
ORDER BY USERS.USERNAME;
在联接上,您可以指定 max
函数,如下所示。
select u.user_id, up.id as user_password_id, up.created
from users u
inner join user_passwords up
on up.user_id = u.user_id
and up.created = (
select max(created) from user_passwords where user_id = u.user_id
);
所以基本上在进行加入时,它会找到为每个加入的用户创建的最新密码 (max(created)
)。
如何获取每个用户最近创建的 user_password 的 USER_PASSWORD ID?
用户Table
USER_ID | USERNAME |
---|---|
1 | USER1 |
2 | USER2 |
3 | USER3 |
USER_PASSWORD Table
ID | USER_ID | PASSWORD | CREATED |
---|---|---|---|
1 | 1 | PASSWORD1 | 2020-01-01 |
2 | 1 | PASSWORD2 | 2020-02-01 |
3 | 1 | PASSWORD3 | 2020-03-01 |
4 | 2 | PASSWORD4 | 2020-04-01 |
5 | 2 | PASSWORD5 | 2020-05-01 |
6 | 2 | PASSWORD6 | 2020-06-01 |
7 | 3 | PASSWORD7 | 2020-07-01 |
8 | 3 | PASSWORD8 | 2020-08-01 |
9 | 3 | PASSWORD9 | 2020-09-01 |
目前我正在使用下面的草率查询
SELECT * FROM
(SELECT * FROM USER) USERS
JOIN (SELECT USER_ID, MAX(CREATED) MAX FROM USER_PASSWORD GROUP BY USER_ID) MAXPASSWORDS
ON USERS.USER_ID = MAXPASSWORDS.USER_ID
JOIN (SELECT * FROM USER_PASSWORD) PASSWORDS
ON USERS.USER_ID = PASSWORDS.USER_ID AND MAXPASSWORDS.MAX = PASSWORDS.CREATED
ORDER BY USERS.USERNAME;
在联接上,您可以指定 max
函数,如下所示。
select u.user_id, up.id as user_password_id, up.created
from users u
inner join user_passwords up
on up.user_id = u.user_id
and up.created = (
select max(created) from user_passwords where user_id = u.user_id
);
所以基本上在进行加入时,它会找到为每个加入的用户创建的最新密码 (max(created)
)。