2016-04-19 3 views
0

Для целей отчетности мне нужна таблица времени, которая работает как таблица поиска, которая перечисляет каждые полчаса в день. Он будет функционировать так же, как и таблица даты, за исключением времени.Создать таблицу времени (в полчаса) в MySQL

Я нашел отличный пример 24-часовой стол:

CREATE TABLE hourly_data 
(
    id INT PRIMARY KEY AUTO_INCREMENT, 
    date DATE NOT NULL, 
    hour INT NOT NULL, 
    f1 INT NOT NULL, 
    f2 INT NOT NULL, 
    f3 INT NOT NULL, 
    f4 INT NOT NULL, 
    f5 INT NOT NULL, 
    f6 INT NOT NULL, 
    inserted timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 
) 

Но я предпочел бы это быть через каждые полчаса. Есть идеи, как это сделать? Это поможет смены и создания специализированных отчетов. Заранее спасибо!

+1

есть 48 с половиной часов в день, просто есть столбец half_hour или что-то и использовать это в сочетании 'Interval (half_hour/2,0) HOUR' –

+0

Спасибо! Я попробую посмотреть, что я получу. Опубликует результаты ... – Nicoale

ответ

0

в MariaDB вы можете направить использовать последовательность двигателя, как это:

SELECT 
    date('2010/01/01') + interval (seq * 30) Minute as mydate 
FROM seq_0_to_10; 

Sample

MariaDB [mysql]> select date('2010/01/01') + interval (seq * 30) Minute as mydate from seq_0_to_10; 
+---------------------+ 
| mydate    | 
+---------------------+ 
| 2010-01-01 00:00:00 | 
| 2010-01-01 00:30:00 | 
| 2010-01-01 01:00:00 | 
| 2010-01-01 01:30:00 | 
| 2010-01-01 02:00:00 | 
| 2010-01-01 02:30:00 | 
| 2010-01-01 03:00:00 | 
| 2010-01-01 03:30:00 | 
| 2010-01-01 04:00:00 | 
| 2010-01-01 04:30:00 | 
| 2010-01-01 05:00:00 | 
+---------------------+ 
11 rows in set (0.00 sec) 

MariaDB [mysql]> 

старый путь без ПОСЛЕДОВАТЕЛЬНОСТИ Engine

SELECT 
    DATE('2010/01/01') + INTERVAL (NR * 30) MINUTE AS mydate 
FROM (
    SELECT d2.a*10+d1.a AS nr FROM (
    SELECT 0 a UNION ALL SELECT 1 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) AS d1 
    CROSS JOIN (
    SELECT 0 a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 ) AS d2 
WHERE d2.a*10+d1.a BETWEEN 0 AND 47 
) AS parameter 
ORDER BY nr; 

образец

MariaDB [(none)]> SELECT 
    -> DATE('2010/01/01') + INTERVAL (NR * 30) MINUTE AS mydate 
    -> FROM (
    -> SELECT d2.a*10+d1.a AS nr FROM (
    -> SELECT 0 a UNION ALL SELECT 1 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) AS d1 
    -> CROSS JOIN (
    -> SELECT 0 a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 ) AS d2 
    -> WHERE d2.a*10+d1.a BETWEEN 0 AND 47 
    ->) AS parameter 
    -> ORDER BY nr; 
+---------------------+ 
| mydate    | 
+---------------------+ 
| 2010-01-01 00:00:00 | 
| 2010-01-01 00:30:00 | 
| 2010-01-01 01:00:00 | 
| 2010-01-01 01:30:00 | 
| 2010-01-01 02:00:00 | 
| 2010-01-01 02:30:00 | 
| 2010-01-01 03:00:00 | 
| 2010-01-01 03:30:00 | 
| 2010-01-01 04:00:00 | 
| 2010-01-01 04:30:00 | 
| 2010-01-01 05:00:00 | 
| 2010-01-01 05:30:00 | 
| 2010-01-01 06:00:00 | 
| 2010-01-01 06:30:00 | 
| 2010-01-01 07:00:00 | 
| 2010-01-01 07:30:00 | 
| 2010-01-01 08:00:00 | 
| 2010-01-01 08:30:00 | 
| 2010-01-01 09:00:00 | 
| 2010-01-01 09:30:00 | 
| 2010-01-01 10:00:00 | 
| 2010-01-01 10:30:00 | 
| 2010-01-01 11:00:00 | 
| 2010-01-01 11:30:00 | 
| 2010-01-01 12:00:00 | 
| 2010-01-01 12:30:00 | 
| 2010-01-01 13:00:00 | 
| 2010-01-01 13:30:00 | 
| 2010-01-01 14:00:00 | 
| 2010-01-01 14:30:00 | 
| 2010-01-01 15:00:00 | 
| 2010-01-01 15:30:00 | 
| 2010-01-01 16:00:00 | 
| 2010-01-01 16:30:00 | 
| 2010-01-01 17:00:00 | 
| 2010-01-01 17:30:00 | 
| 2010-01-01 18:00:00 | 
| 2010-01-01 18:30:00 | 
| 2010-01-01 19:00:00 | 
| 2010-01-01 19:30:00 | 
| 2010-01-01 20:00:00 | 
| 2010-01-01 20:30:00 | 
| 2010-01-01 21:00:00 | 
| 2010-01-01 21:30:00 | 
| 2010-01-01 22:00:00 | 
| 2010-01-01 22:30:00 | 
| 2010-01-01 23:00:00 | 
| 2010-01-01 23:30:00 | 
+---------------------+ 
48 rows in set (0.00 sec) 
+0

это отлично выглядит! :) Тем не менее, я использую MySQL. Будет ли это работать так же, как потенциально? – Nicoale

+0

это SEQUENCE Engine от MariaDB. Это стандартное значение в MariaDB. Я не уверен, что вы можете использовать его в MySQL. Я ПОЧТА ТАКЖЕ ДЛИННЫЙ ПУТЬ В МОЕМ ОТВЕТЕ –

 Смежные вопросы

  • Нет связанных вопросов^_^