sql >> Database >  >> RDS >> Sqlserver

Rijen groeperen op voorwaarde

U kunt Recursive CTE . gebruiken . Ik kan geen betere manier bedenken.

;WITH cte
     AS (SELECT *,
                Row_number()OVER(ORDER BY start) rn
         FROM   Yourtable),
     rec_cte
     AS (SELECT *,
                ( [End] - Start ) AS st,
                1                 AS grp
         FROM   cte
         WHERE  rn = 1
         UNION ALL
         SELECT a.*,
                CASE
                  WHEN st + ( a.[End] - a.Start ) >= 500 THEN a.[End] - a.Start
                  ELSE st + ( a.[End] - a.Start )
                END,
                CASE
                  WHEN st + ( a.[End] - a.Start ) >= 500 THEN b.grp + 1
                  ELSE grp
                END
         FROM   cte a
                JOIN rec_cte b
                  ON a.rn = b.rn + 1)
SELECT Min(Start) as Start,
       Max([End]) as [End],
       Max(st) as Quantity
FROM   rec_cte
GROUP  BY grp
OPTION (maxrecursion 0) 


  1. EF Core naar Mysql-tabelbinding

  2. Waarom bin2hex gebruiken bij het invoegen van binaire gegevens uit PHP in MySQL?

  3. Tabelnamen ophalen met de SELECT-instructie in MySQL

  4. Trage prestaties in gekoppelde serverquery