【问题标题】:Query to show per week, per day, per hour查询每周、每天、每小时显示
【发布时间】:2016-09-14 14:58:34
【问题描述】:

我正在使用 PLSQL,试图查找给定一周的事件计数,按天和小时细分。

基本上我想插入一周,然后计算事件计数,以便我可以轻松识别每天 >1M 和每小时 300k(=GOLD)、每天 500k 和每小时 200k(银)、100k 的计数每天 30k 每小时。

我正在尝试这样的方法来获取每天的数据,但我不知道如何将其分解为每天每小时。甲骨文新秀在这里。

    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 并执行计数的东西都对我有用

任何帮助表示赞赏

【问题讨论】:

  • 小时查询按小时而不是按天分解数据。请添加示例数据和所需结果。
  • 请添加测试数据的 DDL/inserts,预期结果。

标签: sql oracle


【解决方案1】:

如果有帮助请告诉我:

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;

【讨论】: