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

postgresで列が特定の値に変化する場所をカウントします

    lagを使用する 前の行の値を取得し、その後、条件に基づいてカウントします。

    select count(*)
    from (select action_date,action,lag(action) over(order by action_date) as prev_action
          from t
         ) t
    where (action<>prev_action and action=1) or (action=1 and prev_action is null)
    

    または、

    のように簡略化することもできます。
    select 
    count(case when lag(action) over(order by action_date) is null then and action = 1 then 1
               when lag(action) over(order by action_date) is not null and lag(action) over(order by action_date) <> action and action = 1 then 1 
          end) as cnt
    from t
    



    1. LOAD DATALOCALINFILEを使用したSymfony2DoctrinePDOMySQL接続

    2. oci8、php7およびOracle10.1の互換性

    3. postgresql抽出関数ソース

    4. Oracleデータベースで連想配列を作成する方法