Скажем, у меня есть таблица events
, которая выглядит, как этотВычислить мин через несколько столбцов в MySQL
id start end
1 12:09 12:12
2 12:07 12:09
3 12:07 12:08
Я хочу, чтобы получить минимальное время запуска с минимальным идентификатором. Причина, по которой мне нужен идентификатор для ссылки на строку позже, чтобы получить столбец end
.
В этом примере это будет (12:07, 2).
Я знаю, что один из способов получения этого является получение минимального start
первого, а затем принять мин id
этого, как это:
select min (e.id) as minId from events as e
join (
select min (start) as minStart from events
) as x
where e.start = x.minStart
group by e.start
Но есть способ, чтобы получить как в одной
(без подзапроса)? Например,
select min (start, id) as (minStart, minId) from events
Очевидно, что это не так, поскольку это недопустимый синтаксис, но что-то в этом духе?
Последующая деятельность
Как Гордон предложил ниже, при запуске order by start, id limit 1
, MySQL делает использование индекса. Вот то, что EXPLAIN как выглядит, когда limit 1
входит:
1 SIMPLE events index NULL startId 5 NULL 1 NULL
и вот как он выглядит без limit 1
:
1 SIMPLE events ALL NULL NULL NULL NULL 640 Using filesort
Минимальное время запуска с идентификатором будет (1, 12:05). –
@ Gordon Ой, я исправлю это. –