【发布时间】:2015-06-16 14:57:52
【问题描述】:
我有一张桌子
T (variable_name, start_no, end_no)
包含以下值:
(x, 10, 20)
(x, 30, 50)
(x, 60, 70)
(y, 1, 3)
(y, 7, 8)
保证所有区间都是不相交的。
我想在 T-SQL 中编写一个查询来计算不搜索变量的间隔:
(x, 21, 29)
(x, 51, 59)
(y, 4, 6)
我可以在没有光标的情况下执行此操作吗?
我正在考虑按 variable_name 分区,然后按 start_no 排序。但是接下来如何进行呢?给定行集中的当前行,如何访问“下一个”行?
【问题讨论】:
-
所以每个变量的范围都隐含在最低范围和最高范围内,对吗?
-
您使用的是 SQL Server 2012 或更高版本吗?滞后/领先可以帮助你
-
只需加入 variable_name 和 rownumber + 1
-
是的,这是正确的 David W. 例如,对于 x,我不包括 (-inf, 10) 和 (70, +inf)。
-
JamesZ,SQL Server 2014,我宁愿让它在 2008 年也能工作。
标签: sql sql-server tsql