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

SQLで列値の連続発生カウントをフェッチする方法は?

    まず、SQLの定義では、ORDER BYでない限り、データに順序はありません。
    参照:Wikipedia-注文者

    順序を決定する追加の列をテーブルに指定する必要があり、ORDER BYで使用できます。 句、たとえばRN 以下の例の列:

            RN CS_ID     
    ---------- ----------
             1 a         
             2 b         
             3 a         
             4 a         
             5 a         
             6 b         
             7 b         
             8 b         
             9 b   
    

    上記のデータの場合、共通テーブル式(再帰クエリ)を使用して必要な結果を取得できます。たとえば、以下のクエリはOracleデータベースで機能します。

    WITH my_query( RN, cs_id , cont ) AS (
    
        SELECT t.rn, t.cs_id, 1
            FROM My_table t
            WHERE rn = 1
        UNION ALL
        SELECT t.rn, t.cs_id,
             case when t.cs_id = m.cs_id
                  then m.cont + 1
                  else 1
             end
            FROM My_table t
            JOIN my_query m
            ON t.rn = m.rn + 1
    )
    select * from my_query
    order by rn;
    
            RN CS_ID            CONT
    ---------- ---------- ----------
             1 a                   1
             2 b                   1
             3 a                   1
             4 a                   2
             5 a                   3
             6 b                   1
             7 b                   2
             8 b                   3
             9 b                   4
    



    1. RubyのCSVファイルへの列(SQLクエリ)の追加

    2. すべてのクエリで空の結果セットを返すHiveテーブル

    3. 無料のホストを介してmysqlをリモートで接続する

    4. OracleでXLSX(Excel)ファイルを読み取ってインポートする