comment vérifier la séquence dans le server sql

J'ai quelques scénarios et j'ai besoin de vérifier la séquence de vérification pour cela, j'ai besoin de séquence pour les valeurs suivantes

Ce sont datatables réelles qui sont présentées en sql db

  • 10001 10001
  • 10002 10002
  • 10003 10003
  • 10005 10005
  • 10006 10006
  • 10008 10008
  • 10009 10009
  • 10010 10010

donc j'ai besoin d'une gamme pour les valeurs ci-dessus comme ça

  • 10001 10003
  • 10005 10006
  • 10008 10010

et si j'ajoute une nouvelle ligne dans sql

  • 10004 10004

après insert la ligne ci-dessus, datatables réelles qui sont présentées en sql db

  • 10001 10001
  • 10002 10002
  • 10003 10003
  • 10004 10004
  • 10005 10005
  • 10006 10006
  • 10008 10008
  • 10009 10009
  • 10010 10010

alors la gamme sera

  • 10001 10006
  • 10008 10010

et si j'ajoute une nouvelle ligne dans sql

  • 10007 10007

après insert la ligne ci-dessus, datatables réelles qui sont présentées en sql db

  • 10001 10001
  • 10002 10002
  • 10003 10003
  • 10004 10004
  • 10005 10005
  • 10006 10006
  • 10008 10008
  • 10007 10007
  • 10009 10009
  • 10010 10010

alors la gamme sera

  • 10001 10010

quelqu'un peut-il s'il vous plaît aider à résoudre ce problème

C'est un problème classique de lacunes et d'îles. J'ai été capable de reconnaître immédiatement ce que votre requête nécessiterait, mais comme ces types de problèmes semblent assez peu fréquents sur Stack Overflow, j'avais besoin d'une reference pour secouer ma memory. Il y a un excellent article sur le site TechNet de Microsoft qui approfondit les lacunes, les îlots et les performances. Je vous recommand de le lire afin que vous puissiez comprendre comment la requête ci-dessous fonctionne.

SELECT t1.gapID as startOfGroup, MIN(t2.gapID) AS endOfGroup FROM ( SELECT gapID FROM gaps tbl1 WHERE NOT EXISTS ( SELECT * FROM gaps tbl2 WHERE tbl1.gapID = tbl2.gapID + 1 ) ) t1 INNER JOIN ( SELECT gapID FROM gaps tbl1 WHERE NOT EXISTS ( SELECT * FROM gaps tbl2 WHERE tbl2.gapID = tbl1.gapID + 1 ) ) t2 ON t1.gapID <= t2.gapID GROUP BY t1.gapID 

J'ai créé un Fiddle pour votre problème dans MySQL, car SQL Server semble être perpétuellement cassé sur ce site.

SQLFiddle

Avec une version plus récente de SQL Server, cela peut être facilement résolu en utilisant les fonctions de la window:

 declare @t table(i int) insert @t values (10001), (10002), (10003), (10005), (10006), (10008), (10009), (10010) ;with x as ( select *, case when i = lag(i) over(order by i)+1 then 0 else 1 end g from @t ), y as ( select i, sum(g) over(order by i) sg from x ) select min(i), max(i) from y group by sg