Учитывая даты каждую минуту, извлекайте каждые два - PullRequest
0 голосов
/ 02 мая 2018

У меня есть таблица, подобная следующей:

 ID     Date                    Value
 1      2018-04-29 14:51:01     0.1
 2      2018-04-29 14:51:01     0.21
 3      2018-04-29 14:51:01     0.123
 2      2018-04-29 14:52:01     5.7
 3      2018-04-29 14:52:01     1.2
 1      2018-04-29 14:52:01     5.9
 1      2018-04-29 14:53:01     1.23
 3      2018-04-29 14:53:01     7.9
 2      2018-04-29 14:53:01     1.68
 1      2018-04-29 14:54:01     0.01
 2      2018-04-29 14:54:01     0.068
 3      2018-04-29 14:54:01     0.2686
 2      2018-04-29 14:55:01     2.3
 3      2018-04-29 14:55:01     3.4
 1      2018-04-29 14:55:01     5.7
 1      2018-04-29 14:56:01     102.357
 3      2018-04-29 14:56:01     12.36
 2      2018-04-29 14:56:01     123.47
 1      2018-04-29 14:57:01     12379.42
 2      2018-04-29 14:57:01     1230.1
 3      2018-04-29 14:57:01     35.235
 2      2018-04-29 14:58:01     1237.3
 3      2018-04-29 14:58:01     4.68
 1      2018-04-29 14:58:01     123.578
 1      2018-04-29 14:59:01     1233.57
 3      2018-04-29 14:59:01     23.457
 2      2018-04-29 14:59:01     0.213

Идентификаторы с их датами (при вставке текущей временной метки) вставляются каждую минуту. Некоторые идентификаторы могут находиться в таблице в течение определенного периода времени, и они могут появиться позже в другое время. Эти идентификаторы не упорядочены, они могут быть в любом месте текущей минутной «партии».

Из этой таблицы я хотел бы извлекать значения каждые 2 минуты, поэтому результат должен быть следующим:

 ID     Date                    Value
 1      2018-04-29 14:51:01     0.1
 2      2018-04-29 14:51:01     0.21
 3      2018-04-29 14:51:01     0.123
 1      2018-04-29 14:53:01     1.23
 3      2018-04-29 14:53:01     7.9
 2      2018-04-29 14:53:01     1.68
 2      2018-04-29 14:55:01     2.3
 3      2018-04-29 14:55:01     3.4
 1      2018-04-29 14:55:01     5.7
 1      2018-04-29 14:57:01     12379.42
 2      2018-04-29 14:57:01     1230.1
 3      2018-04-29 14:57:01     35.235

PD: я не могу использовать переменные в этом запросе, но я могу создавать функции / процедуры по мере необходимости.

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

Другая проблема с этим запросом состоит в том, что таблица интервалов в 1 минуту имеет МИЛЛИОНЫ строк с множеством различных идентификаторов, если это должно быть сделано только одним запросом.

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

1 Ответ

0 голосов
/ 02 мая 2018

Функция MySQL minute() является основой вашего решения - она ​​возвращает часть аргумента minute , например, :

minute('2018-04-29 14:51:01') -- returns 51

Используйте модовое деление на это:

select ...
from ...
where minute(date) % 2 = 1  -- only odd minutes

аналогично, каждая третья минута будет:

where minute(date) % 3 = 1 

и т. Д.

Если вы хотите стать более продвинутым, вы можете выбрать минуты после часа, который вы хотите, например, все простые минуты:

where minute(date) in (2,3,5,7,11,13,17,23,29,31,37,41,43,47,53,59)
...