2016-09-14 22 views
1

私はPLSQLで作業しており、特定の週のイベントカウントを曜日と時間で分解しています。週ごと、1日あたり、1時間あたりに表示するクエリ

本質的に私は、1週間に1万回、1時間当たり300k(=ゴールド)、1日あたり500k、1時間当たり200kというカウントを容易に識別できるように、 1日あたり100k時間あたり30k。

私は1日あたりのデータを取得するためにこのようなことをしようとしていますが、1日あたり、1時間あたりのデータをどのように分解するのかはわかりません。 Oracleのルーキーはこちら

SELECT TO_CHAR(TRUNC(store.transaction_datetime, 'HH'), 'DD-MON-YYYY HH24:MI:SS'), Identifier, 
     COUNT (*) 
    FROM data.stats store 
    WHERE store.transaction_datetime >= '2016-09-04 00:00:00' 
    AND store.transaction_datetime <= '2016-09-10 23:59:59' 
GROUP BY Identifier, TO_CHAR (TRUNC (store.transaction_datetime, 'HH'), 'DD-MON-YYYY HH24:MI:SS') 
ORDER BY TO_CHAR (TRUNC (store.transaction_datetime, 'HH'), 'DD-MON-YYYY HH24:MI:SS') ASC; 

私はExcelに投げるとカウントを行うことができます何が私

のための任意の助けに動作します

+1

時間クエリは、データを破壊します時間ではなく、日である。サンプルデータと必要な結果を追加してください。 –

+0

テストデータのDDL /挿入、予想される結果を追加してください。 – runningviolent

答えて

0

それが助け場合、私に教えてください感謝:

SELECT T.*, 
     CASE WHEN CNT_PER_DAY > ... AND CNT_PER_HOUR > ... THEN 'GOLD' 
      WHEN CNT_PER_DAY > ... AND CNT_PER_HOUR > ... THEN 'SILVER' 
      WHEN CNT_PER_DAY > ... AND CNT_PER_HOUR > ... 'BRONZE' 
      ELSE ... 
     END CATEGORY 
FROM (
    SELECT DISTINCT 
      Identifier, 
      TO_CHAR(TRUNC(store.transaction_datetime, 'HH'), 'DD-MON-YYYY HH24:MI:SS') HOUR_TIME, 
      COUNT (*) OVER (PARTITION BY Identifier,TRUNC(store.transaction_datetime, 'HH')) CNT_PER_HOUR, 
      TO_CHAR(TRUNC(store.transaction_datetime, 'DD'), 'DD-MON-YYYY HH24:MI:SS') DAY_TIME, 
      COUNT (*) OVER (PARTITION BY Identifier,TRUNC(store.transaction_datetime, 'DD')) CNT_PER_DAY, 
      store.transaction_datetime 
    FROM data.stats store 
    WHERE store.transaction_datetime >= '2016-09-04 00:00:00' 
    AND store.transaction_datetime <= '2016-09-10 23:59:59') T 
ORDER BY TO_CHAR (TRUNC (T.transaction_datetime, 'HH'), 'DD-MON-YYYY HH24:MI:SS') ASC; 
関連する問題