Неточный поиск ближайшего значения времени - PullRequest
4 голосов
/ 20 июля 2011

Я ищу программно и синтаксически эффективный способ поиска значения на основе метки времени.По сути, я хочу найти самое близкое совпадение метки времени ...

Скажем, например, в таблице MySQL, которую я имею:

ID    TIME    Blob
1    4:03:10    abc
2    4:04:30    def
3    4:04:45    ghi

И я хочу запросить эту таблицу на основе времени 4:4:40.Я хотел бы вернуть идентификатор записи № 3 ... Если бы я искал 4:04:35, я бы хотел вернуть идентификатор № 2 ... Как мне реализовать это?У меня много миллионов строк в этой таблице, и я думал, что что-то вроде levenshtein dist будет слишком медленным ..?

Ура!

Ответы [ 3 ]

8 голосов
/ 20 июля 2011

Как насчет:

SELECT id, MIN(ABS(time(time) - time("4:04:35"))) FROM table
1 голос
/ 20 июля 2011

Имейте в виду, я больше привык к Oracle, где даты можно манипулировать точно так же, как числа, если это необходимо, но я думаю, что вы должны искать строку, в которой указана дата с наименьшим отличием от даты поиска. Разница может быть положительной или отрицательной, поэтому для этого потребуется ABS ().

Как насчет

SELECT table.id, 
       ABS(TIMESTAMPDIFF(SECOND, table.time, [datetime.now])) as difference
FROM table

Если все выглядит нормально, вам нужно выбрать идентификатор с минимальной [разницей]

0 голосов
/ 20 июля 2011

ВЫБРАТЬ МИНУТУ (время) ИЗ таблицы ГДЕ ВРЕМЯ> [datetime.now]

...