#mysql
#mysql
Вопрос:
У меня есть база данных планировщика событий mysql
, и я пытаюсь получить отчет о таблице городов, чтобы показать все города, упорядоченные по количеству дней для каждого события.
например, некоторые записи:
event_id - city_id - start - end
1 - 88 - 2019-01-01 - 2019-01-05
2 - 89 - 2019-02-01 2019-02-03
3 - 90 - 2019-03-01 2019-03-04
4 - 88 - 2019-01-06 - 2019-01-07
Отчет может быть:
city_id - days
88 - 7
90 - 4
89 - 3
Комментарии:
1. Не могли бы вы отредактировать свой вопрос и прикрепить то, что вы пробовали до сих пор?
2. всегда ли существует — между датами 1 — 88 — 2019-01-01 — 2019-01-05 В некоторых строках нет —
Ответ №1:
вы можете сделать это с помощью запроса, подобного этому:
SELECT event_id , city_id, SUM( DATEDIFF( `end`,`start`) 1 ) as days
FROM sample
GROUP BY city_id
order by SUM( DATEDIFF( `end`,`start`) 1 ) DESC;
пример
MariaDB [test]> select * from sample;
---------- --------- ------------ ------------
| event_id | city_id | start | end |
---------- --------- ------------ ------------
| 1 | 88 | 2019-01-01 | 2019-01-05 |
| 2 | 89 | 2019-02-01 | 2019-02-03 |
| 3 | 90 | 2019-03-01 | 2019-03-04 |
| 4 | 88 | 2019-01-06 | 2019-01-07 |
---------- --------- ------------ ------------
4 rows in set (0.229 sec)
MariaDB [test]>
MariaDB [test]> SELECT event_id , city_id, SUM( DATEDIFF( `end`,`start`) 1 ) as days
-> FROM sample
-> GROUP BY city_id
-> order by SUM( DATEDIFF( `end`,`start`) 1 ) DESC;
---------- --------- ------
| event_id | city_id | days |
---------- --------- ------
| 1 | 88 | 7 |
| 3 | 90 | 4 |
| 2 | 89 | 3 |
---------- --------- ------
3 rows in set (0.001 sec)
MariaDB [test]>
Комментарии:
1. большое вам спасибо! Я просто меняю порядок по дням вместо функции повторной суммы.
2. @Watanabe77 — у вас должна быть функция sum, если у вас более 1 раза один и тот же city_id, чтобы получить правильный результат
Ответ №2:
используйте приведенный ниже запрос —
select
event_id, city_id, DATEDIFF(end, start) as days
from
table_name
order by DATEDIFF(end, start) desc
Комментарии:
1. Можете ли вы объяснить это подробнее? Как этот запрос может вернуть упорядоченный список?
2. Я просто написал запрос, чтобы получить количество дней между 2 датами. да, для упорядочения мы должны добавить предложение order by как «порядок по DATEDIFF (end, start) desc»