MySQL Group By получает заголовок столбца с наименьшим значением даты - PullRequest
0 голосов
/ 18 апреля 2011

У меня есть запрос вроде:

SELECT *
FROM table
GROUP BY sid
ORDER BY datestart desc
LIMIT 10

, который возвращает последние 10 групп sid.

Для каждой из этих групп мне нужен столбец заголовка строки с наименьшей датой запусказначение

Я пытался использовать

SELECT *, min(datestart)

, но это не вернуло строку с наименьшим значением даты начала, только самое низкое значение даты начала.Мне нужен заголовок от самой низкой даты начала.

(Соответствующий) Структура таблицы:

    CREATE TABLE `table` (
  `title` varchar(1000) NOT NULL,
  `datestart` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `sid` bigint(12) unsigned NOT NULL,
  KEY `datestart` (`datestart`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 18 апреля 2011

Обновленный ответ

select t1.* from `table` as t1
inner join (
select sid,min(datestart) as elder
from `table`
group by sid
order by elder desc limit 10) as t2
on t1.sid = t2.sid and t1.datestart = t2.elder

Использовать составной индекс для (sid, дата начала)

0 голосов
/ 18 апреля 2011

Попробуйте этот запрос.Вы получите ожидаемые результаты.Если это не работает, измените Table_2.datestart > Table_1.datestart на Table_2.datestart < Table_1.datestart

SELECT title, datestart
FROM `table` AS Table_1
LEFT JOIN `table` AS Table_2 ON (Table_2.sid = Table_1.sid AND Table_2.datestart > Table_1.datestart)
Table_2.sid IS NULL;

Отредактированный запрос

SELECT Table_1.title, Table_1.datestart
FROM `table` AS Table_1
LEFT JOIN `table` AS Table_2 ON (Table_2.sid = Table_1.sid AND Table_2.datestart > Table_1.datestart)
Table_2.sid IS NULL;
...