Время разделения MySQL варьируется на более мелкие куски - PullRequest
0 голосов
/ 21 декабря 2010

Мне недавно было поручено завершить работу над веб-приложением PHP / MySQL, когда разработчик ушел на прошлой неделе.Я не эксперт по MySQL, поэтому прошу прощения, если это очень простой вопрос.Я искал SO большую часть двух дней, пытаясь найти относительно простое решение моей проблемы, которое заключается в следующем.

Проблема в двух словах:
У меня есть таблица MySQL, полная начальной и конечной даты-времени (GMT -5) и значений меток времени UNIX, охватывающих длительности нерегулярной длины, и необходимо разбить / разделить / разделить их на болееРегулярное время кусков (5 минут).Я не собираюсь подсчитывать количество записей в строках за период времени / блок / период, если это имеет смысл.

Пример данных:

started, ended, started_UNIX, ended_UNIX  
2010-10-25 15:12:33, 2010-10-25 15:47:09, 1288033953, 1288036029  

Что я надеюсь получить:

2010-10-25 15:12:33, 2010-10-25 15:15:00, 1288033953, 1288037700  
2010-10-25 15:15:00, 2010-10-25 15:20:00, 1288037700, 1288038000  
2010-10-25 15:20:00, 2010-10-25 15:25:00, 1288038000, 1288038300  
2010-10-25 15:25:00, 2010-10-25 15:30:00, 1288038300, 1288038600  
2010-10-25 15:30:00, 2010-10-25 15:35:00, 1288038600, 1288038900  
2010-10-25 15:35:00, 2010-10-25 15:40:00, 1288038900, 1288039200  
2010-10-25 15:40:00, 2010-10-25 15:45:00, 1288039200, 1288039500  
2010-10-25 15:45:00, 2010-10-25 15:47:09, 1288039500, 1288039629  

Если вам интересно, вот краткое и грязное приложение и зачем мне нужны данные:
Обзор приложения: приложение получает очень простые POST-запросы, генерируемые базовым сенсорным устройством, когдаего входные контакты поступают на землю, что отправляет запрос INSERT в базу данных, где MySQL записывает метку времени (как запущено).Когда входные контакты возвращаются из заземленного состояния, устройство отправляет другой запрос POST, в результате чего приложение PHP отправляет запрос UPDATE, в который вставляется временная метка времени модификации (как завершенная).

Мой работодатель недавно изменил единицу измерения периодической отчетности с Секунды "Вкл." В день на Секунды "Вкл." На 5-минутный интервал .Я сформулировал то, что, по моему мнению, было бы работоспособным решением, но когда я посмотрел на него на бумаге, это выглядело как кошмар Рубе Голдберга, построенный в MySQL, так что ничего не вышло.

Есть предложения, как разбить эти промежутки на 5-минутные блоки?Хранение всего этого в MySQL было бы моим предпочтением, хотя я приму любые предложения.Спасибо за любые ваши предложения.

Опять же, я прошу прощения, если это не сложно.
Если я задам какие-либо дополнительные вопросы коллективного сознания SO в будущем, я постараюсьСкажите им немного лучше.Любая помощь будет с радостью принята.

Спасибо,
Нерен

Ответы [ 2 ]

1 голос
/ 21 декабря 2010

Вместо того чтобы пытаться преобразовать необработанные данные, которые хорошо и плотно представлены, напишите модуль поиска, который считывает необработанные данные и внутренне преобразует их в желаемое представление. Я полагаю, что он может записать его обратно в виде новой таблицы, но есть ли какая-то причина, по которой отчетность не может быть сгенерирована непосредственно из программы?

0 голосов
/ 21 декабря 2010

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

В вашей базе данных создайте таблицу с именем числа и вставьте числа от 0 до 9:

CREATE TABLE  numbers (
   num int(10) unsigned NOT NULL,
   PRIMARY KEY (num)
 ); 

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

   SELECT ADDDATE('2010-10-25 15:15:00', INTERVAL 5*`i` MINUTE) FROM (
       SELECT 10*n1.num + n2.num AS i
        FROM numbers n1 CROSS JOIN numbers n2) nums
     WHERE i <= TIME_TO_SEC(TIMEDIFF('15:45', '15:15'))/(5*60)
     ORDER BY i ASC;

Сделать данные в 2 этапа. Сначала создайте недостающие строки. Затем обновите исходную строку до 5 минут или меньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...