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
donc j'ai besoin d'une gamme pour les valeurs ci-dessus comme ça
et si j'ajoute une nouvelle ligne dans sql
après insert la ligne ci-dessus, datatables réelles qui sont présentées en sql db
alors la gamme sera
et si j'ajoute une nouvelle ligne dans sql
après insert la ligne ci-dessus, datatables réelles qui sont présentées en sql db
alors la gamme sera
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.
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