Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite 如何在查询中获取行的最终长度?_Sqlite_With Statement - Fatal编程技术网

Sqlite 如何在查询中获取行的最终长度?

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

我正在学习SQL,我有一个任务,当我输入时,我需要找到不连续行的最终长度,例如:

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
谢谢你,我没有想到用这种方式进行递归。