我有一张道路表,其中包含每条道路的起点/终点里程。
我需要分析这些数据并获取相同数据的查询更多行,这些行包含填充列名称且值为&#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
答案 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,所以记住它会很有帮助。
这就是你要追求的吗?
另外,正如其他评论者提到的那样,“名称”不是一个好的列名,因为它是一个保留字。我把它留在了代码中,所以它与你的问题一致。