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

レコードを時間ごとまたは日ごとにグループ化し、ギャップをゼロまたはヌルで埋めます

    試してください:
    最初のクエリ(時間単位):

    with t as (
      select mnd + ((level-1)/24) ddd
      from
      (select trunc(min(copied_timestamp),'hh') mnd, trunc(max(copied_timestamp),'hh') mxd from req) v
      connect by mnd + ((level-1)/24) <= mxd
      )
    select to_char(trunc(d1, 'hh'), 'yyyy-mm-dd hh24'), count(d2) from 
    (select nvl(copied_timestamp, ddd) d1, copied_timestamp d2 from req right outer join (
      select ddd from t) ad on ddd = trunc(copied_timestamp, 'hh'))
    group by trunc(d1, 'hh');
    

    2番目のクエリ(日別):

    with t as (
          select mnd + level-1 ddd
          from
          (select trunc(min(copied_timestamp),'dd') mnd, trunc(max(copied_timestamp),'dd') mxd from req) v
          connect by mnd + level-1 <= mxd
          )
        select to_char(trunc(d1, 'dd'), 'yyyy-mm-dd'), count(d2) from 
        (select nvl(copied_timestamp, ddd) d1, copied_timestamp d2 from req right outer join (
          select ddd from t) ad on ddd = trunc(copied_timestamp, 'dd'))
        group by trunc(d1, 'dd');
    

    3番目のクエリ(月別):

    with t as (
          select add_months(mnd, level-1) ddd
          from
          (select trunc(min(copied_timestamp),'mm') mnd, trunc(max(copied_timestamp),'mm') mxd from req) v
          connect by add_months(mnd, level-1) <= mxd
          )
        select to_char(trunc(d1, 'mm'), 'yyyy-mm'), count(d2) from 
        (select nvl(copied_timestamp, ddd) d1, copied_timestamp d2 from req right outer join (
          select ddd from t) ad on ddd = trunc(copied_timestamp, 'mm'))
        group by trunc(d1, 'mm');
    



    1. OracleInstantClientDYLD_LIBRARY_PATHエラー

    2. PostgreSQL:PostgreSQLでテーブルを表示する

    3. ExcelスプレッドシートまたはCVSからMySQLにデータをインポートする

    4. OLAP接続の使用中にエラーが発生しました:MSOLAPプロバイダーがローカルマシンに登録されていません...