Не удается создать запрос MySQL, который генерирует 4 строки для каждой строки в таблице, на которую он ссылается - PullRequest
0 голосов
/ 04 июня 2010

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

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

Ответы [ 3 ]

1 голос
/ 04 июня 2010

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

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 голос
/ 04 июня 2010

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

select *
from days, hour_increments

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

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

1 голос
/ 04 июня 2010

Вы можете сделать вставку с оператором 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 ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...