2017-12-20 4 views
-2

Ich habe eine Abfrage, die eine angezeigt wird.SQL Finden Sie fortlaufende Nummern in Zeilen

enter image description here

Ich brauche Reihen von Mindest- und Höchstanzahl aufzulisten, wenn es Sequenz ist. Dies sollte folgende Ausgabe ergeben: bitte helfen, ich bin nicht gut in Englisch.

dank

enter image description here

+1

Die meisten Menschen hier formatierten Text wollen, keine Bilder (oder Links zu Bildern .) – jarlh

+2

Was hast du probiert? Zeigen Sie uns Ihren aktuellen Anfrageversuch. – jarlh

+1

Welche DBMS verwenden Sie? – jarlh

Antwort

1

Sie können Quer gelten max und min Reihen und DENSE_RANK gruppieren Sie Sequenz zu finden.

SQL-Update Dank Tony zur Vereinfachung mein Kreuz applys;)

declare @myt table (id int,number bigint, tip int, kalaf int) 

insert into @myt 
values 
(971545701,4110897922,411,41108979), 
(971578550,6131339133,613,61313391), 
(971578992,6131339402,613,61313394), 
(971578993,6131339403,613,61313394), 
(971578994,6131339404,613,61313394), 
(971579095,6131339627,613,61313396), 
(971579100,6131339632,613,61313396), 
(971579102,6131339634,613,61313396); 

WITH T 
AS (
    SELECT * 
     ,DENSE_RANK() OVER (
      ORDER BY ID 
      ) - ID AS Grp 
    FROM @myt 
    ) 
    ,test 
AS (
    SELECT MIN(ID) AS RangeStart 
     ,MAX(ID) AS RangeEnd 
     ,MIN(number) AS minNum 
     ,MAX(number) AS maxNum 
    FROM T 
    GROUP BY Grp 
    ) 
SELECT t.RangeStart AS ID 
    ,t.minNum 
    ,t.maxNum 
    ,f.tip 
    ,f.kalaf 
FROM test t 
INNER JOIN @myt f ON t.RangeStart = f.id 
Order by ID 

Ergebnis

enter image description here

+0

vergib mir nicht das hübscheste SQL – plaidDK

+1

Sie von dem Kreuz loswerden kann die Anwendung: MIT T AS ( SELECT *, DENSE_RANK() OVER (ORDER BY ID) - ID AS Grp FROM #Tips ) , test as ( MIN SELECT (ID) AS Range, MAX (ID) AS rangeEnd, \t MIN (Nummer) AS minNum, \t MAX (Nummer) AS maxNum VON T GROUP BY Grp ) t.RangeStart als ID auszuwählen, \t t.minNum, \t t.maxNum, \t f.tip, \t f.kalaf von Test t Exklusionsverknüpfung #Tips f auf t .RangeStart = f.id; –

+0

@TonyMathew Danke für die Vereinfachung. Ich habe meine Antwort aktualisiert, damit sie besser optimiert wird. Der erste, wurde gerade so geschrieben, wie mir eingefallen ist :) Trotzdem funktionieren beide. – plaidDK

Verwandte Themen