Как включить подзапрос во внутреннее соединение?Как включить подзапрос во внутреннее соединение?
Я следующий SQL:
SELECT
date_trunc(
'hour',
FROM_UNIXTIME(timefrom)
) AS HourFrom,
date_trunc(
'hour',
(FROM_UNIXTIME(timeto) + interval '45' minute)
) AS HourTo
FROM
reservation
ORDER BY
date_trunc(
'day',
FROM_UNIXTIME(timefrom)
)
Это дает мне такие данные:
TimeFrom TimeTo
2015-08-04 11:00:00.000 2015-08-04 14:00:00.000
2015-08-04 18:00:00.000 2015-08-04 20:00:00.000
2015-08-04 21:00:00.000 2015-08-04 23:00:00.000
Я хочу иметь таблицу чисел и сделать внутреннее соединение, как следующее:
SELECT DATE_ADD(HOUR, i - 1, TimeFrom) AS TimeFrom,
DATE_ADD(HOUR, i, TimeFrom) AS TimeTo
FROM (SELECT 1 AS i UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12
UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL SELECT 16
UNION ALL SELECT 17 UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20
UNION ALL SELECT 21 UNION ALL SELECT 22 UNION ALL SELECT 23 UNION ALL SELECT 24
) AS numbers
INNER JOIN mytable ON numbers.i <= DATE_DIFF(HOUR, TimeFrom, TimeTo)
ORDER BY TimeFrom
Поэтому я могу получить примерно следующее:
TimeFrom TimeTo
2015-08-04 11:00:00.000 2015-08-04 12:00:00.000
2015-08-04 12:00:00.000 2015-08-04 13:00:00.000
2015-08-04 13:00:00.000 2015-08-04 14:00:00.000
2015-08-04 18:00:00.000 2015-08-04 19:00:00.000
2015-08-04 19:00:00.000 2015-08-04 20:00:00.000
2015-08-04 21:00:00.000 2015-08-04 22:00:00.000
2015-08-04 22:00:00.000 2015-08-04 23:00:00.000
Как я могу использовать результат первого запроса для внутреннего соединения (замените mytable на этот результат запроса)? Это возможно? Мне не удалось найти способ подключить мой запрос, чтобы выполнить внутреннее соединение.
Я не очень разбираюсь в синтаксисе SQL и не смог найти ответ для этого, несмотря на то, что весь день смотрел.
Второй Querry вы имеете право там ... Вот именно так, как вы сделай это. То есть вы помещаете оператор ENTIRE select в parens и даете ему имя. Однако не ставьте AS. Просто оставьте пробел перед именем. Этот набор записей будет рассматриваться как таблица. – durbnpoisn
@durbnpoisn вы могли бы написать ответ? Вы должны взять кредит за свой ответ, а не кто-то еще – davejal
@durbnpoisn, что вы имеете в виду дать имя? – Javier