sql >> データベース >  >> RDS >> Sqlserver

行を条件別にグループ化する

    Recursive CTE を使用できます .これ以上良い方法は思いつきません。

    ;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. 最初のドロップダウンボックスに基づいて、DBから2番目のドロップダウンボックスのオプションを取得します

    2. ORA-01882を取得しています:aws ec2インスタンスで、Oracle UCPでタイムゾーンリージョンが見つかりませんか?

    3. mysqlでの同期ストアドプロシージャの実行

    4. RPostgreSQLを介してSQLクエリファイルを実行する方法