Задать вопрос
wangler
@wangler

Как найти наиболее точный промежуток?

Здравствуйте.
Подскажите алгоритм, по которому я смогу найти максимально точный промежуток с минимумом запросов. Возможно это уже предусмотрено в MySQL.
есть таблица с отрезками (start, end) и значение, которое надо найти c наиболее точным вхождением.
Например, есть таблица с интервалами:
|  id   |        start          |           end      |
|  1    |        10             |         1000       |
|  2    |        100            |          125       |
|  3    |        50             |          3000      |


при поиске значения 101 хотелось бы получить именно интервал с id=2, ведь он наиболее точный.
Благодарю за подсказки!
  • Вопрос задан
  • 165 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
1. Математически формализовать понятие "наиболее точный", составить формулу метрики.
2. Выбрать все интервалы, где :value BETWEEN `start` AND `end` и посчитать для них метрику.
3. Отсортировать по метрике.
4. Выбрать первую строку из сортированного списка.
Ответ написан
@guras256
select t.id from ranges t 
where &value between t.start and t.end -- сначала отсекаем диапазоны, в которые точно не попадаем
order by t.end - t.start -- определяем "наиболее точный" диапазон как наименьший удовлетворяющий и сортируем по нему в порядке возрастания.

таким образом, первая запись будет самая подходящая
рабочий пример
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы