zoukankan      html  css  js  c++  java
  • GAPSAND ISLANDS

    寻找列中的gap.其实在inside sql server 2008中有专门的讨论。

    create table test (id int primary key); go

    insert into values (1),(2),(3),(4),(5),(6),(8),(9),(11),(12),(13),(14),(18),(19)

    查找出结果为:

    missingbefore missingafter

    6                           8

    9                           11

    14                         18

    以下为sql:

    第一种方法使用了一个辅助表temp(tid int primarykey).在里面插入了一定量的数据。

    WITH CTE AS
    (
     SELECT
     TID 
     FROM
     temp WHERE TID<=
     (SELECT MAX(ID)FROM TEST)
    )
    ,
    CTE2 AS
    (
    SELECT * 
    FROM CTE
    WHERE TID NOT IN 
    (
     SELECT ID FROM TEST 
    )
    ),
    CTE3 AS
    (
    SELECT 
    ROW_NUMBER() OVER(ORDER BY T2.ID) AS ROWNO
    ,T2.ID
    FROM CTE2 T1
    JOIN TEST T2
    ON
    ( T1.TID=T2.ID-1
    OR T1.TID=T2.ID+1)
    )
    SELECT 
    T.ID AS MISSINGAFTER,
    T1.ID AS MISSINGBEFORE
    FROM CTE3 T
    JOIN CTE3 T1
    ON T.ROWNO=T1.ROWNO-1
    WHERE T.ROWNO%2=1
    and T1.ROWNO%2=0
    
     WITH TT AS 
     (
     select  ROW_NUMBER() over(  order by cur.id asc) as rownumber,
        bef.id as bef_id,  
        cur.id as cur_id,  
        aft.id as aft_id        
      from test cur  
      left join test bef  
      on cur.id=bef.id+1  
      left join test aft  
      on cur.id=aft.id-1 
     )
     SELECT bf.cur_id as missing_after,  
            af.cur_id as missing_before   
     FROM TT as bf
     join TT as af on bf.rownumber=af.rownumber-1
     where af.cur_id-bf.cur_id>1; 
    
  • 相关阅读:
    C++ for(char c:s)遍历字符串||for (char c : s)和for (char& c : s)的区别
    二维数组的查找--剑指offer(C++)
    C++学习笔记之--boolalpha
    在C++中matrix.size()和matrix [0] .size()之间的区别是什么?
    C3_note
    用webpack4从零开始构建react脚手架
    php
    正则表达式基础
    DOM
    常用H5
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/2295921.html
Copyright © 2011-2022 走看看