Самое близкое соответствие для полей даты и времени MySQL - PullRequest
1 голос
/ 26 мая 2011

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

Ответы [ 2 ]

3 голосов
/ 26 мая 2011

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

SELECT `timestampcolumn`
FROM `thetable`
ORDER BY ABS(`timestampcolumn` - givenvalue)
LIMIT 1

Должно быть уловкой и не очень сильно увеличивает производительность, если вы используете индекс в правильных столбцах. MySQL создан для подобных запросов.

0 голосов
/ 10 января 2013
  1. Вы можете использовать функции MySQL, чтобы создать маску для преобразования метки времени в японскую дату, такую ​​как 20130109 (ггггммдччммссзз) или по коду с использованием PHP, Java и т. Д .;

  2. В то время, когда вы пытаетесь найти строки с помощью SELECT, вы можете делать такие вещи, как:

SELECT * FROM TABLE WHERE ADATE BETWEEN(LEFT(BEGINDATE, 8), LEFT(ENDDATE, 8));

OR

SELECT * FROM TABLE WHERE ADATA < LEFT(MYDATE, 8) LIMIT 1;

ИЛИ

ИСПОЛЬЗУЙТЕ WILDCARD, КАК "_" В МЕСТЕ, КОТОРОЕ ВАМ НУЖНО, КАК МЕСЯЦ В ДЕНЬ, КОТОРЫЙ ВЫ ХОТИТЕ ИЗМЕНИТЬ.

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