Sqlite 如何在查询中获取行的最终长度?
我正在学习SQL,我有一个任务,当我输入时,我需要找到不连续行的最终长度,例如:Sqlite 如何在查询中获取行的最终长度?,sqlite,with-statement,Sqlite,With Statement,我正在学习SQL,我有一个任务,当我输入时,我需要找到不连续行的最终长度,例如: start | finish 0 | 3 2 | 7 15 | 17 这里的正确答案是9,因为它从0到3,然后我被支持忽略多次出现的部分,从3到7忽略这两个部分,因为它已经在0到3和15到17之间。我应该只通过sql queryno函数得到这个答案,我不确定如何得到。我曾经尝试过使用with的一些代码,但我一辈子都不知道如何正确地忽略所有的倍数。 我的半尝试: WITH temp
start | finish
0 | 3
2 | 7
15 | 17
这里的正确答案是9,因为它从0到3,然后我被支持忽略多次出现的部分,从3到7忽略这两个部分,因为它已经在0到3和15到17之间。我应该只通过sql queryno函数得到这个答案,我不确定如何得到。我曾经尝试过使用with的一些代码,但我一辈子都不知道如何正确地忽略所有的倍数。
我的半尝试:
WITH temp AS(
SELECT s as l, f as r FROM lines LIMIT 1),
cte as(
select s, f from lines where s < (select l from temp) or f > (select r from temp)
)
select * from cte
这实际上只给了我所有没有完全使用的行,并扩展了长度,但我不知道从这里做什么。使用递归CTE,将所有开始、结束间隔打断为与间隔总长度相同的1个单位长度间隔,然后计算所有不同的间隔:
WITH cte AS (
SELECT start x1, start + 1 x2, finish FROM temp
WHERE start < finish -- you can omit this if start < finish is always true
UNION
SELECT x2, x2 + 1, finish FROM cte
WHERE x2 + 1 <= finish
)
SELECT COUNT(DISTINCT x1) length
FROM cte
看。
结果:
长
9
谢谢你,我没有想到用这种方式进行递归。