Не удается создать запрос MySQL, который генерирует 4 строки для каждой строки в таблице, к которой он обращается

0

Мне нужно создать запрос MySQL, который генерирует 4 строки для каждой строки в таблице, которую он ссылается. Мне нужна часть информации в этих строках, чтобы повторить, а некоторые - разные. В таблице каждая строка стоит один день. Мне нужно сломать день с шагом в 6 часов, поэтому четыре строки для каждой записи. Мне нужно создать один столбец, который для каждого дня будет иметь значения "12AM", "6AM", "12PM" и "6PM", а другой столбец будет иметь соответствующие числовые значения, рассчитанные для этих записей.

Большое спасибо заблаговременно, и я буду очень признателен за любую помощь в этом.

  • 2
    Пример данных был бы хорош, даже если он не реален, и образец ожидаемого результата.
  • 0
    Всегда ли это будет четыре раза? Вы можете структурировать таблицу следующим образом: date | 12 утра | 6 утра | 12 вечера значение | 6pmvalue
Показать ещё 3 комментария
Теги:
database

3 ответа

1
Лучший ответ

То, что запрос должен делать и вычислять со значениями, немного расплывчато, но просто генерировать четыре строки для каждой строки в другой таблице является прямым:

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
1

Создайте таблицу, содержащую ваши четыре момента времени, и присоединитесь к ней, чтобы получить декартово произведение.

select *
from days, hour_increments

Декартовым произведением двух таблиц является объединение каждой строки в первой таблице каждой строке во второй. Например, если мы имеем таблицы {1, 2, 3} и {a, b, c}, то произведение {1a, 1b, 1c, 2a, 2b, 2c, 3a, 3b, 3c}.

Как сделать разумные вычисления на основе этого набора данных - это еще одна история, которая зависит от данных и того, что вы пытаетесь сделать.

  • 0
    Большое спасибо за ваше предложение о взаимном присоединении. Это решило часть моей проблемы, но не все. После перекрестного соединения у меня есть таблица, в которой в одном столбце «12:00», «6:00», «12:00» и «6:00» повторяются для каждой записи дня. Предполагается, что в другом столбце значения рассчитаны для этих приращений, но в настоящее время заполнены значениями NULL. Мне нужно заполнить этот столбец рассчитанными значениями, которые будут взяты из некоторой справочной таблицы. Я не знаю, как связать эти рассчитанные значения с правильными приращениями времени. Я буду очень признателен за любые идеи. Заранее большое спасибо.
1

Вы можете сделать вставку с инструкцией 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 ...
  • 0
    Если вы не помещаете запросы SELECT в их собственный набор скобок, вы можете применить только одно предложение ORDER BY & LIMIT ко всему запросу.
  • 0
    @OMG Пони - Ты всегда здесь, не так ли :). Серьезно, я предполагал, что OP может поместить свои условия в каждое предложение WHERE, что ограничит запросы. Я что-то не так понял?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню