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

SQLで連続する行を複数の列でグループ化する方法

    これはギャップと島の問題です。それを解決するための1つの方法は、row_number()を使用します。 :

    select Date, User, min(Time) as start_time, max(time) as end_time,
           Location,
           listagg(Service, ',') within group (order by service),     
           count(*) as cnt
    from (select t.*,
                 row_number() over (date order by time) as seqnum,
                 row_number() over (partition by user, date, location order by time) as seqnum_2
          from t
         ) t
    group by Date, User, Location, (seqnum - seqnum_2);
    

    これがどのように機能するかを説明するのは少し難しいです。サブクエリを実行すると、行番号の違いによって、探しているグループがどのように定義されるかがわかります。



    1. OracleSEQUENCE-'インクリメント'および'キャッシュ'

    2. MicrosoftAccessのフォームにヘッダーとフッターを追加する方法

    3. t-sql(SQL Server)ストアドプロシージャをpgsql(postgre sql)に変換するツール

    4. pdoexecutegiveのエラー