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

Oracleイベントカウントクエリ

    試してみてください:

    CREATE OR REPLACE VIEW my_view AS
    WITH date_bookends AS (
      SELECT LEAST(MIN(t.sampled_on), MIN(t.received_on), MIN(t.completed_on), MIN(t.authorized_on)) 'min_date'
             GREATEST(MAX(t.sampled_on), MAX(t.received_on), MAX(t.completed_on), MAX(t.authorized_on)) 'max_date'
        FROM SAMPLE t),
        all_hours AS (
      SELECT t.min_date + numtodsinterval(LEVEL - 1,'hour') date_by_hour
        FROM date_bookends t
    CONNECT BY LEVEL <= ( t.max_date - t.min_date + 1) * 24)
    SELECT h.date_by_hour,
           COUNT(CASE WHEN h.hour = TRUNC(s.sampled_on,'hh24') THEN 1 END) sampled#
           COUNT(CASE WHEN h.hour = TRUNC(s.received_on,'hh24') THEN 1 END) received#
           COUNT(CASE WHEN h.hour = TRUNC(s.completed_on,'hh24') THEN 1 END) completed#
           COUNT(CASE WHEN h.hour = TRUNC(s.authorized_on,'hh24') THEN 1 END) authorized#
      FROM all_hours h
    CROSS JOIN sample s
      GROUP BY h.hour
    

    サブクエリファクタリングを使用しない場合:

    CREATE OR REPLACE VIEW my_view AS
    SELECT h.date_by_hour,
           COUNT(CASE WHEN h.hour = TRUNC(s.sampled_on,'hh24') THEN 1 END) sampled#
           COUNT(CASE WHEN h.hour = TRUNC(s.received_on,'hh24') THEN 1 END) received#
           COUNT(CASE WHEN h.hour = TRUNC(s.completed_on,'hh24') THEN 1 END) completed#
           COUNT(CASE WHEN h.hour = TRUNC(s.authorized_on,'hh24') THEN 1 END) authorized#
      FROM (SELECT t.min_date + numtodsinterval(LEVEL - 1,'hour') date_by_hour
             FROM (SELECT LEAST(MIN(t.sampled_on), MIN(t.received_on), MIN(t.completed_on), MIN(t.authorized_on)) 'min_date'
                                GREATEST(MAX(t.sampled_on), MAX(t.received_on), MAX(t.completed_on), MAX(t.authorized_on)) 'max_date'
                           FROM SAMPLE t) t
    CONNECT BY LEVEL <= ( t.max_date - t.min_date + 1) * 24) h
    CROSS JOIN sample s
    GROUP BY h.hour
    

    クエリはSAMPLESテーブルに2回アクセスします。最初は、date_by_hourの構築をフレーム化するための最も早い日付と最も遅い日付を取得します。 値。



    1. MySQLクエリの構築で立ち往生

    2. Oracle DB:大文字と小文字を区別せずにクエリを作成するにはどうすればよいですか?

    3. PHPを使用してMySQLデータベースからデータを取得し、編集用のフォームに表示する

    4. エラーコード1292MysqlDateTime