MySQL GROUP BY“group”并按最大ID排序

时间:2013-10-22 16:06:03

标签: mysql

我有下表:。我正在尝试为每个 scenario_id

选择最高的主键ID
id  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);

2 个答案:

答案 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解决方案无法有效获得的其他字段。