У меня есть база данных с таблицей с именем BOOKINGS
, содержащей следующие значения
main-id place-id start-date end-date
1 1 2018-8-1 2018-8-8
2 2 2018-6-6 2018-6-9
3 3 2018-5-5 2018-5-8
4 4 2018-4-4 2018-4-5
5 5 2018-3-3 2018-3-10
5 1 2018-1-1 2018-1-6
4 2 2018-2-1 2018-2-10
3 3 2018-3-1 2018-3-28
2 4 2018-4-1 2018-4-6
1 5 2018-5-1 2018-5-15
1 3 2018-6-1 2018-8-8
1 4 2018-7-1 2018-7-6
1 1 2018-8-1 2018-8-18
1 2 2018-9-1 2018-9-3
1 5 2018-10-1 2018-10-6
2 5 2018-11-1 2018-11-5
2 3 2018-12-1 2018-12-25
2 2 2018-2-2 2018-2-19
2 4 2018-4-4 2018-4-9
2 1 2018-5-5 2018-5-23
Что мне нужно сделать, это для каждого main-id
Мне нужно найти наибольшее общее количество дней для каждогоplace-id
.По сути, мне нужно определить, где каждый main-id провел больше всего времени.
Затем эту информацию необходимо поместить в представление, поэтому, к сожалению, я не могу использовать временные таблицы.
Запрос, который мне ближе всего подходит,
CREATE VIEW `MOSTTIME` (`main-id`,`place-id`,`total`) AS
SELECT `BOOKINGS`.`main-id`, `BOOKINGS`.`place-id`, SUM(DATEDIFF(`end-date`, `begin-date`)) AS `total`
FROM `BOOKINGS`
GROUP BY `BOOKINGS`.`main-id`,`RESERVATION`.`place-id`
Какойвыходы:
main-id place-id total
1 1 24
1 2 18
1 5 5
2 1 2
2 2 20
2 4 9
3 1 68
3 2 24
3 3 30
4 1 5
4 2 10
4 4 1
5 1 19
5 2 4
5 5 7
Что мне нужно, так это максимальный total
для каждого отдельного main-id
:
main-id place-id total
1 1 24
2 2 20
3 1 68
4 2 10
5 1 19
Я выкопал большое количество похожих постов, которые рекомендуюттакие вещи, как само присоединение;однако из-за того, что мне нужно создать новое поле total
, используя агрегатную функцию (SUM
) и другую функцию (DATEDIFF
), а не просто запрашивать существующее поле, мои попытки реализовать эти решения былине удалось.
Я надеюсь, что мой запрос, который меня сблизил, потребует лишь небольшой модификации, чтобы получить правильное решение.