Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Разгруппировать периоды по часам


Автор: lancelot555 16.12.2015, 01:12
Имеем таблицу вида:
id (int), date_from (date_time), date_to (date_time), value (float)
Уникальный ключ:  id+date_from
Периоды в этой таблице не пересекаются, интервалы 1 час
Пример строк:
1|2015-12-13 09:00:00|2015-12-14 08:59:59|1.34
1|2015-12-14 09:00:00|2015-12-14 23:59:59|1.45
2|2015-12-14 09:00:00|2015-12-14 11:59:59|1.05
3|2015-12-14 00:00:00|2015-12-14 23:59:59|1.3

Нужно построить дополнительную таблицу, где указанные периоды из первой таблицы будут разбиты на интервалы (1 час)
Для указанного примера итоговой таблицей будет:
1|2015-12-13 09:00:00|2015-12-13 09:59:59|1.34
1|2015-12-13 10:00:00|2015-12-13 10:59:59|1.34
1|2015-12-13 11:00:00|2015-12-13 11:59:59|1.34
1|2015-12-13 12:00:00|2015-12-13 12:59:59|1.34
1|2015-12-13 13:00:00|2015-12-13 13:59:59|1.34
1|2015-12-13 14:00:00|2015-12-13 14:59:59|1.34
1|2015-12-13 15:00:00|2015-12-13 15:59:59|1.34
1|2015-12-13 16:00:00|2015-12-13 16:59:59|1.34
1|2015-12-13 17:00:00|2015-12-13 17:59:59|1.34
1|2015-12-13 18:00:00|2015-12-13 18:59:59|1.34
1|2015-12-13 19:00:00|2015-12-13 19:59:59|1.34
1|2015-12-13 20:00:00|2015-12-13 20:59:59|1.34
1|2015-12-13 21:00:00|2015-12-13 21:59:59|1.34
1|2015-12-13 22:00:00|2015-12-13 22:59:59|1.34
1|2015-12-13 23:00:00|2015-12-13 23:59:59|1.34
1|2015-12-14 00:00:00|2015-12-14 00:59:59|1.34
1|2015-12-14 01:00:00|2015-12-14 01:59:59|1.34
1|2015-12-14 02:00:00|2015-12-14 02:59:59|1.34
1|2015-12-14 03:00:00|2015-12-14 03:59:59|1.34
1|2015-12-14 04:00:00|2015-12-14 04:59:59|1.34
1|2015-12-14 05:00:00|2015-12-14 05:59:59|1.34
1|2015-12-14 06:00:00|2015-12-14 06:59:59|1.34
1|2015-12-14 07:00:00|2015-12-14 07:59:59|1.34
1|2015-12-14 08:00:00|2015-12-14 08:59:59|1.34
1|2015-12-14 09:00:00|2015-12-14 09:59:59|1.45
1|2015-12-14 10:00:00|2015-12-14 10:59:59|1.45
1|2015-12-14 11:00:00|2015-12-14 11:59:59|1.45
1|2015-12-14 12:00:00|2015-12-14 12:59:59|1.45
1|2015-12-14 13:00:00|2015-12-14 13:59:59|1.45
1|2015-12-14 14:00:00|2015-12-14 14:59:59|1.45
1|2015-12-14 15:00:00|2015-12-14 15:59:59|1.45
1|2015-12-14 16:00:00|2015-12-14 16:59:59|1.45
1|2015-12-14 17:00:00|2015-12-14 17:59:59|1.45
1|2015-12-14 18:00:00|2015-12-14 18:59:59|1.45
1|2015-12-14 19:00:00|2015-12-14 19:59:59|1.45
1|2015-12-14 20:00:00|2015-12-14 20:59:59|1.45
1|2015-12-14 21:00:00|2015-12-14 21:59:59|1.45
1|2015-12-14 22:00:00|2015-12-14 22:59:59|1.45
1|2015-12-14 23:00:00|2015-12-14 23:59:59|1.45
и так далее .....

Как построить вторую таблицу оптимально на SQL ?

Автор: lancelot555 16.12.2015, 01:52
Нашел решение сам:
создаем вспомогательную таблицу со списком всех нужных часов, далее
запрос вида
Код

INSERT INTO table2
            SELECT id,hour,ADDTIME(hour, '0:59:59'),value
            FROM table1
            JOIN hours ON (hour BETWEEN date_from AND date_to)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)