搜索间隔“交叉”行

时间:2019-01-31 12:54:16

标签: mysql sql

我需要有关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 |

所以我可以在两者之间进行简单的搜索

或间隔计数器

1 个答案:

答案 0 :(得分:0)

如果我们假设行从不相交,那么可以对重叠进行求和:

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