LINUX.ORG.RU
решено ФорумAdmin

Как составить такой sql запрос?

 ,


0

1

Например есть таблица:
create table `test` (
`id` int not null auto_increment,
`dop_id` int not null,
`time` datetime not null
);
с записями
insert into `test` (`dop_id`, `time`) value (1,now());
insert into `test` (`dop_id`, `time`) value (1,now());
insert into `test` (`dop_id`, `time`) value (1,now());
insert into `test` (`dop_id`, `time`) value (2,now());
insert into `test` (`dop_id`, `time`) value (2,now());
insert into `test` (`dop_id`, `time`) value (2,now());
insert into `test` (`dop_id`, `time`) value (3,now());
insert into `test` (`dop_id`, `time`) value (3,now());
insert into `test` (`dop_id`, `time`) value (3,now());

нужно выбрать по одной последней записи c dop_id 1,2 и 3.

★★★★★

Ответ на: комментарий от TDrive

Думал не нужно. Можно наговнокодить и выбирать max(id) рассчитывая на то что ключи и даты растут одинаково, но это уж сильно плохое решение. Хз как нормально одним запросом сделать.

Kalashnikov ★★★ ()
Ответ на: комментарий от no-dashi

Если строго по условию («выбрать по одной последней»), то таки

SELECT * FROM table t, (SELECT dop_id, max(time) time FROM table GROUP by dop_id LIMIT 1) x WHERE t.dop_id = x.dop_id AND t.time = x.time;
, иначе, если записи с одинаковым dop_id кидались чаще, чем 1 раз в секунду...

berrywizard ★★★★★ ()
Ответ на: комментарий от berrywizard

limit - непортируемая нестандартная конструкция. Проще ввести уникальность для (dop_id,time) и не париться :-)

no-dashi ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.