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

すべての月を含む月ごとにグループ化するにはどうすればよいですか?

    Oracleには日付操作関数の優れた配列 。この問題に関連する2つの問題は次のとおりです

    • MONTHS_BETWEEN() 2つの日付の間の月数を計算します
    • ADD_MONTHS() 指定された月数だけ日付をインクリメントします

    これらの関数を組み合わせて、テーブルのレコードにまたがるすべての月のテーブルを生成できます。次に、外部結合を使用して、USER_INFOからそのカレンダーにレコードを条件付きで結合します。 count(id)に一致するレコードがない場合 ゼロになります。

    with cte as (
      select max(trunc(created, 'MM')) as max_dt
             , min(trunc(created, 'MM')) as min_dt
      from user_info
      )
     , cal as (
        select add_months(min_dt, (level-1)) as mth
        from cte
        connect by level <= months_between(max_dt, min_dt) + 1
    )
    select to_char(cal.mth, 'YYYY-MM') as operation
           , count(id)
    from  cal
         left outer join user_info
       on trunc(user_info.created, 'mm') = cal.mth
    group by rollup (cal.mth)
    order by 1
    /
    



    1. Laravel5でライブでMySQLに接続できません

    2. XAMPPフォルダーを新しいコンピューターに移動し、MySQLを起動しようとすると(XAMPPErrorDomainエラー1)が発生するようになりました

    3. 動的ランキング行へのMySQLクエリ

    4. TRANSACTION_MUTEXおよびマルチセッショントランザクションアクセス