MYSQL从表中选择最新条目并引用另一个表的最新条目
我有这些桌子: 行动表:MYSQL从表中选择最新条目并引用另一个表的最新条目,mysql,Mysql,我有这些桌子: 行动表: +------+-------+--------------------------------------+ | id | action | contact_list_id | +------+-------+--------------------------------------+0 | 1 | 1 | 1234
+------+-------+--------------------------------------+
| id | action | contact_list_id |
+------+-------+--------------------------------------+0
| 1 | 1 | 1234 |
| 2 | 1 | 1235 |
| 3 | 2 | 1234 |
| 4 | 3 | 1235 |
+------+-------+--------------------------------------+
联系人列表表:
+------+-------+--------------------------------------+
| id | user_id | updated_by |
+------+-------+--------------------------------------+0
| 1234 | 1 | 1 |
| 1235 | 1 | 1 |
| 1236 | 2 | 1 |
+------+-------+--------------------------------------+
我必须找到只返回一行的最新操作表条目
拥有用户_id=1
我尝试了这个,但没有返回正确的结果:
SELECT a.*
FROM contact_list a
INNER JOIN (
SELECT MAX(id)
FROM action
GROUP BY id
) b ON a.id = b.id
WHERE user_id = 1
预期结果:
+------+-------+--------------------------------------+
| id | action | contact_list_id |
+------+-------+--------------------------------------+0
|
| 4 | 3 | 1235 |
+------+-------+--------------------------------------+
我猜最新的意思是拥有最大的id
值。请记住,表中的行没有固有的顺序。你总是要说出你所说的最新和最早的意思
让我们一点一点地解决这个问题
首先,使用子查询获取每个联系人列表id的最大action.id
SELECT MAX(id) id, contact_list_id
FROM action
GROUP BY contact_list_id
接下来,使用该子查询从操作表中取出所需的行
SELECT action.id, action.action, action.contact_list_id
FROM action
JOIN (
SELECT MAX(id) id, contact_list_id
FROM action
GROUP BY contact_list_id
)maxaction ON action.contact_list_id = maxaction.contact_list_id
接下来,将其连接到联系人表,并添加WHERE子句以获取所需的行
SELECT action.id, action.action, action.contact_list_id
FROM action
JOIN (
SELECT MAX(id) id, contact_list_id
FROM action
GROUP BY contact_list_id
) maxaction ON action.contact_list_id = maxaction.contact_list_id
JOIN contact ON action.contact_list_id = contact.contact_list_id
WHERE contact.user_id = 1
总结:
id
值您可以使用下一个解决方案来解决您的问题:
SELECT *
FROM action
WHERE id = (
-- here sub-query for get last action id for user 1
SELECT MAX(action.id)
FROM `action`
JOIN contact_list ON contact_list.id = action.contact_list_id
WHERE user_id = 1
);
您可以在上测试查询,请参见:请提供所需结果您应该在
联系人列表\u id
上加入表操作
,而不是在id
上加入表。