0

次のテーブルがあります: Treescenario_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);
4

2 に答える 2

2

集計関数を使用してグループの特定の値を取得する

SELECT scenario_id, max(id) as max_id
FROM tree 
WHERE user_id = 1
GROUP BY scenario_id
于 2013-10-22T16:07:47.523 に答える
2

select * を保持し、グループ化を避けて同じレコードからこれらの結果を取得したい場合は、自己結合を使用することもできます。

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 by/aggregate ソリューションを使用して効率的に取得できない追加のフィールドを取得するのに役立つ場合があります。

于 2013-10-22T17:25:30.280 に答える