Поиск интервальных «перекрестных» строк

0

Мне нужна помощь с проблемой в Mysql. У меня есть таблица с интервалами int, как это:

|name | start | end  |
---------------------
| aaa | 1531  | 1540 |
| bbb | 1541  | 1550 |
| ccc | 1561  | 1580 |

Если пользователь говорит, что ему нужен интервал между 1531 и 1550, я должен вернуть true, потому что он доступен в таблице.

С помощью этого запроса это невозможно:

SELECT * FROM table WHERE start <= 1531 AND end >= 1550

Я ожидаю, что возвращаемый запрос будет чем-то отличным от пустого. Таким образом, пользователь может использовать интервал в моем приложении.

Спасибо, парни!


отредактировано: мне нужно вернуть что-то вроде этого:

| aaa | 1531  | 1540 |
| bbb | 1541  | 1550 |

или счетчик интервалов, которые совпадают.

другой пример:

|name | start | end  |
----------------------
| aa  | 1     | 100  |
| bb  | 101   | 200  |
| vv  | 201   | 300  |
| dd  | 1501  | 1600 |
| ff  | 1601  | 1700 |
----------------------

и мне нужно

| XXX |    1  |  300 |
| YYY | 1501  | 1700 |

или счетчик интервалов

  • 0
    предложение where для каждой строки, но не для перекрестных. приведите несколько других примеров строк. и от них объясни, что именно ты хочешь получить. и покажите, как должен выглядеть ваш ожидаемый результат.
  • 0
    какую версию MySQL вы используете? Можно ли перекрывать интервалы?
Показать ещё 2 комментария
Теги:

1 ответ

0

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

select (sum(1 + least(end, 1550) - greatest(start, 1531)) =
        (1 + 1550 - 1531)
       )
from t
where 1531 <= end and
      1550 >= start;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню