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

MySQL:連続した月のレコードの数

    これは、MySQLで変数(または非常に複雑な相関サブクエリ)を使用して行うことができます。他のデータベースでは、ウィンドウ/分析関数を使用します。

    ロジックは次のとおりです。

    1. 月に1行、購入者を取得します。
    2. 変数を使用して、連続する月の各グループに「グループ化」値を割り当てます。
    3. 人と「グループ化」の値で集計します。

    SQLフィドルでテストされたクエリは次のとおりです。

    select person, count(*) as numMonths
    from (select person, ym, @ym, @person,
                 if(@person = person and @ym = ym - 1, @grp, @grp := @grp + 1) as grp,
                 @person := person,
                 @ym := ym
          from (select distinct person, year(purdate)*12+month(purdate) as ym
                from records r
               ) r cross join
               (select @person := '', @ym := 0, @grp := 0) const
          order by 1, 2
         ) pym
    group by person, grp;
    


    1. MySQL動的クロス集計クエリ:追加の列として子レコードを選択する

    2. PL / SQLコレクション:Oracleデータベースのネストされたテーブル

    3. 1093MySQLテーブルのエラーが2回指定されました

    4. SQL構文エラー