В настоящее время я хочу понять, почему порядок в группе меняется, даже подумав, что я «даю» ему правильную «первую» строку.
CREATE TABLE IF NOT EXISTS `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`A` int(11) NOT NULL,
`B` int(11) NOT NULL,
`C` int(11) NOT NULL,
`D` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
INSERT INTO `test` (`id`, `A`, `B`, `C`, `D`) VALUES
(1, 1, 77, 0, 'Vasya'),
(2, 1, 77, 999, 'Masha'),
(6, 1, 77, 999, 'Clone'),
(3, 1, 88, 1, 'Natasha'),
(4, 2, 1, 1, 'Dima'),
(5, 3, 1, 1, 'Katya');
Эти два запроса дают один и тот же ответ:
SELECT A, B, C, D, id FROM `test` WHERE `A`=1 AND `B`=77 ORDER BY `C` DESC
SELECT DISTINCT A, B, C, D, id FROM `test` WHERE `A`=1 AND `B`=77 ORDER BY `C` DESC
Но эти два дают разные ответы:
SELECT * FROM (
SELECT A, B, C, D, id FROM `test` WHERE `A`=1 AND `B`=77 ORDER BY `C` DESC
) AS t GROUP BY A, B
SELECT * FROM (
SELECT DISTINCT A, B, C, D, id FROM `test` WHERE `A`=1 AND `B`=77 ORDER BY `C` DESC
) AS t GROUP BY A, B
Я просто хочу получить строки с максимальным «C», которые принадлежат одному «A» и одному «B». Но без «ОТЛИЧИЯ». Что я делаю не так?
PS : мне пришлось добавить A
= 1 , чтобы быть более точным. В рабочем проекте такого условия нет, это , а не запрос на выбор одной строки.