Мне нужно создать запрос MySQL, который генерирует 4 строки для каждой строки в таблице, которую он ссылается. Мне нужна часть информации в этих строках, чтобы повторить, а некоторые - разные. В таблице каждая строка стоит один день. Мне нужно сломать день с шагом в 6 часов, поэтому четыре строки для каждой записи. Мне нужно создать один столбец, который для каждого дня будет иметь значения "12AM", "6AM", "12PM" и "6PM", а другой столбец будет иметь соответствующие числовые значения, рассчитанные для этих записей.
Большое спасибо заблаговременно, и я буду очень признателен за любую помощь в этом.
То, что запрос должен делать и вычислять со значениями, немного расплывчато, но просто генерировать четыре строки для каждой строки в другой таблице является прямым:
Select ...
From Table
Cross Join (
Select '12 AM'
Union All Select '6 AM'
Union All Select '12 PM'
Union All Select '6 PM'
) As Times
Создайте таблицу, содержащую ваши четыре момента времени, и присоединитесь к ней, чтобы получить декартово произведение.
select *
from days, hour_increments
Декартовым произведением двух таблиц является объединение каждой строки в первой таблице каждой строке во второй. Например, если мы имеем таблицы {1, 2, 3} и {a, b, c}, то произведение {1a, 1b, 1c, 2a, 2b, 2c, 3a, 3b, 3c}.
Как сделать разумные вычисления на основе этого набора данных - это еще одна история, которая зависит от данных и того, что вы пытаетесь сделать.
Вы можете сделать вставку с инструкцией SELECT
и использовать UNION
для получения 4 записей. Ниже представлен псевдокод SQL
.
INSERT INTO table1
( clock_time
, some_value
)
SELECT '12AM'
, sum(some_value)
FROM ref_table
WHERE ...
UNION ALL
SELECT '6AM'
, sum(some_value)
FROM ref_table
WHERE ...
UNION ALL
SELECT '12PM'
, sum(some_value)
FROM ref_table
WHERE ...
UNION ALL
SELECT '6PM'
, sum(some_value)
FROM ref_table
WHERE ...