我有下表:树。我正在尝试为每个 scenario_id
选择最高的主键IDid user_id scenario_id
----------------------------------
100 1 10
200 1 10
300 1 5
400 1 5
500 1 5
SELECT * FROM tree
WHERE user_id = 1
GROUP BY scenario_id
ORDER BY id DESC
根据我的上述查询,我没有获得最大的ID。我得到 300和100 - 但我希望得到 200和500 。 这是要测试的表转储:
CREATE TABLE IF NOT EXISTS `tree` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`scenario_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
INSERT INTO `tree` (`id`, `user_id`, `scenario_id`) VALUES
(5, 1, 5),
(100, 1, 10),
(200, 1, 10),
(300, 1, 5),
(400, 1, 5),
(500, 1, 5);
答案 0 :(得分:2)
使用聚合函数获取组的特定值
SELECT scenario_id, max(id) as max_id
FROM tree
WHERE user_id = 1
GROUP BY scenario_id
答案 1 :(得分:2)
如果您想保留您的选择*并避免分组以从同一记录中获取这些结果,您还可以使用自我加入:
SELECT t1.*
FROM
tree t1 LEFT JOIN tree t2 ON t1.scenario_id = t2.scenario_id AND t2.id > t1.id
WHERE
t2.id IS NULL;
有时,这可以用于提取您使用group / aggregate解决方案无法有效获得的其他字段。