2015-09-09 2 views
1

У меня есть в базе данных MySQL таблицу «travel_data» с тремя соответствующими столбцами:Получить MIN и MAX даты в одном запросе

+--------------------------+ 
| from | to | date  | 
+--------------------------+ 
|City1 | City2 | 2015-12-12| 
|City3 | City4 | 2016-12-12| 
|City1 | City2 | 2015-06-06| 
|City3 | City4 | 2017-01-01| 
+--------------------------+ 

(плюс несколько других colums, что мне не нужно в данный момент) ,

Я ищу для запроса, который позволяет мне получить в одном запросе, если это возможно, первый и последний день для каждого маршрута в строке, то есть что-то вроде:

+------------------------------------------------+ 
|from | to | firstTravelDate | LastTravelDate| 
+------------------------------------------------+ 
|City1 | City2 | 2015-06-06  | 2015-12-12 | 
|City3 | City4 | 2016-12-12  | 2017-01-01 | 
+------------------------------------------------+ 

Я искать «mysql выбирает максимальный минимум в одном запросе», но решения оттуда, несмотря на то, что они вообще работали, возвращают mix/max за таблицу; Мне нужно min/max за возможную комбинацию из/в. Это меня озадачило до такой степени, что я даже не начинаю работать с запросом. Это нужно запускать только на MySql, поэтому решение, не соответствующее стандарту, не требуется.

(Усовершенствования по названию приветствуются, я не чувствую, что название полностью охватывает фактический вопрос).

+0

Это основной запрос агрегации. Вы знакомы с 'group by'? –

+0

@GordonLinoff Не достаточно, кажется. Я могу сгруппировать по своим маршрутам, и мне удалось получить либо минимальную, либо максимальную дату, но не оба в одной строке. –

ответ

4

Как Гордон указывается в комментариях, это просто объединение запросов. Вы хотите сделать следующее

SELECT `from`, to, 
     MIN(date) AS firstTravelDate, 
     MAX(date) AS LastTravelDate 
FROM travel_data 
GROUP BY `from`, to; 

Вам может понадобиться снова клещами от переменных «FROM» и «К», поскольку те являются зарезервированными ключевыми словами в MySQL.

Кроме того, в интересах «научить вас ловить рыбу» как бы я хотел бы порекомендовать взглянуть на https://sqlschool.modeanalytics.com/. Есть много SQL-ресурсов, и режим фокусируется на PostgreSQL, а не на MySQL ... но это тоже очень хорошо и очень интересно читать.

+0

Спасибо за помощь. Я знал немного SQL, но, видимо, он не остается с вами, если вы не практикуете. Я обязательно сделаю повторение :-) Будет ли повышаться и принимать, как только у меня была возможность проверить. –

+0

Cool. Дайте мне знать, если есть какие-либо вопросы :) – evanv

+0

Еще раз спасибо! Я был отброшен тем фактом, что phpMyAdmin на моем сервере дал неустойчивые результаты независимо от того, какой запрос, как только я начал тестировать в командной строке, все работало красиво. –

3

Попыться;

select 
    `from`, `to`, min(date) firstTravelDate, max(date) LastTravelDate 
from travel_data 
group by `from`, `to` 

Demosqlfiddle

0

вы можете сделать переменную для вашего «от» и «до» затем запустить:

select min(date),max(date) 
from yourtable 
where travel_data.from=x 
and travel_data.to=y 
+0

На самом деле я не думаю, что это сработает. Вам придется перебирать все возможные значения from и to, что будет крайне неэффективно, особенно по сравнению с просто используемым SQL, как предполагалось, и сгруппированием, сгруппированным с и с. – evanv

Смежные вопросы