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

カウント付きのSQL連続レコード

    これを行うには、変数を使用できます。

    select phone_number from (
    select c.*,
    @prev_outcome:[email protected]_outcome,
    @cur_outcome:=system_outcome,
    @prev_pnum:[email protected]_pnum,
    @cur_pnum:=phone_number,
    case when @cur_pnum = @prev_pnum and @prev_outcome <> @cur_outcome then @rn:[email protected]+1
         when @cur_pnum = @prev_pnum and @prev_outcome = @cur_outcome then @rn:[email protected]
    else @rn:=1 end as rank
    from calls c, 
    (select @rn:=0,@prev_pnum:='',@cur_pnum:='',@prev_outcome:='',@cur_outcome:='') r
    order by phone_number,dt
        ) x
    where system_outcome='No Answer'
    group by phone_number,rank
    having count(*) > 6
    

    このクエリは4つの変数を使用します

    1)@cur_outcomeは、最初は空の文字列に設定されています。その後、selectは現在の行のsystem_outcomeを割り当てます。

    2)@prev_outcomeは、最初は空の文字列に設定されています。その後、selectはそれを@cur_outcome(初めて空の文字列など)に設定します。

    3)最初は空の文字列に設定されている@cur_pnum。その後、selectは現在の行のphone_numberを割り当てます。

    4)@prev_pnumは、最初は空の文字列に設定されています。その後、selectはそれを@cur_pnum値(最初は空の文字列)に設定します。

    order by ここでは、phone_numberとdateに基づいて現在の行と前の行を指定するための句が重要です。

    最初に内部クエリを実行して、変数がどのように設定されているかを確認します。これにより、状況が明確になります。

    Sample Demo

    デモには、質問で示されたものよりも多くのサンプルデータが含まれています。



    1. CentOS6.2でMySQLのバージョンを5.1から5.5に更新します

    2. .Netアプリケーション用のOracleプロバイダーを選択するにはどうすればよいですか?

    3. AndroidStudioアセットのsqliteをコピーしても機能しません

    4. テーブルの列からIDを削除する