分析间隙的间隔

时间:2016-03-28 18:07:31

标签: sql oracle

我有一张道路表,其中包含每条道路的起点/终点里程。

我需要分析这些数据并获取相同数据的查询更多行,这些行包含填充列名称且值为&#39; gap <的道路之间的间隙开始/结束的里程数/ EM>&#39 ;.

初始表:

id    name     kmstart   kmend
1     road1      0        150
2     road2     150       200
3     road3     220       257
4     road4     260       290

结果查询:

id    name     kmstart   kmend
1     road1      0        150
2     road2     150       200
null  gap       200       220
3     road3     220       257
null  gap       257       260
4     road4     260       290

1 个答案:

答案 0 :(得分:2)

尝试此查询:

SELECT NULL, 'gap', previous_kmend AS kmstart, kmstart AS kmend
FROM (
  SELECT id, name, kmstart, kmend, LAG(kmend) OVER (ORDER BY kmstart, kmend) AS previous_kmend
  FROM roads
)
WHERE previous_kmend < kmstart
UNION ALL
SELECT id, name, kmstart, kmend
FROM roads
ORDER BY kmstart, kmend

我刚刚进行了快速测试,它对我有用。

它使用LAG函数获取前一个kmend行,如果它小于当前记录的kmstart行,则返回“gap”行。我最近写了一篇article about the LAG function,所以记住它会很有帮助。

这就是你要追求的吗?

另外,正如其他评论者提到的那样,“名称”不是一个好的列名,因为它是一个保留字。我把它留在了代码中,所以它与你的问题一致。