查找一小时内按用户数回答的问题数量

时间:2014-10-08 08:15:59

标签: oracle oracle11g oracle10g

我要求显示1到20个问题,有多少队在0-23小时内回答。表结构

Team_id Question_id Updated
124     25092       02-SEP-14 11:30:12 AM       
15      25076       02-SEP-14 02:31:15 PM       
258     25061       02-SEP-14 03:02:33 PM       
298     25196       02-SEP-14 03:32:49 PM       
450     25203       02-SEP-14 07:01:05 PM       
471     25351       02-SEP-14 07:47:31 PM       
482     25350       02-SEP-14 08:01:03 PM       
78      24924       02-SEP-14 08:01:29 PM       
541     26032       02-SEP-14 09:35:00 PM       
708     26485       02-SEP-14 12:19:48 PM       
726     26125       02-SEP-14 01:00:11 PM       
145     26221       02-SEP-14 03:45:32 PM       
824     26436       02-SEP-14 06:30:16 PM       
87      26505       02-SEP-14 06:30:22 PM       
825     26488       02-SEP-14 06:31:34 PM       
466     26488       02-SEP-14 06:34:48 PM       
868     26091       02-SEP-14 08:30:59 PM       
1356    28852       02-SEP-14 07:45:14 PM       
1342    28852       02-SEP-14 07:45:27 PM   

查询应返回

Hours            1    2     3     4     5   to  20
10               6    0     2     3     6   to  25
11               3    2     1     1     7   to 300
12               2    0     5     0     7   to  30
13               1    6     1     1     7   to  40
  1. 这些是在10小时内只回答1个问题的团队数量
  2. 这些是在10小时内仅回答2个问题的团队数量等。
  3. 请注意,这不是第1或第2个问题。

    由于 阿伦

2 个答案:

答案 0 :(得分:0)

我想你需要这样的东西:

select hour,
       count(decode(cnt, 1, 1)) as q1,
       count(decode(cnt, 2, 1)) as q2,
       count(decode(cnt, 3, 1)) as q3,
       count(decode(cnt, 4, 1)) as q4,
       ...
       count(decode(cnt, 20, 1)) as q20
  from (
       select to_char(updated, 'HH24') as hour
            , count(*) as cnt
        from  &table_name
       group by to_char(updated, 'HH24'), team_id
       )
 group by hour;

答案 1 :(得分:0)

据我了解,也许你想要这样的东西:

SQL> WITH DATA AS(
  2  SELECT 124  team_id,   25092 question_id, to_date('02-SEP-14 11:30:12 AM','DD-MON-RR HH:MI:SS AM') UPDATED FROM DUAL UNION ALL
  3  SELECT 15 ,     25076       ,to_date('02-SEP-14 02:31:15 PM','DD-MON-RR HH:MI:SS AM') FROM DUAL UNION ALL
  4  SELECT 258 ,    25061       ,to_date('02-SEP-14 03:02:33 PM','DD-MON-RR HH:MI:SS AM') FROM DUAL UNION ALL
  5  SELECT 298  ,   25196       ,to_date('02-SEP-14 03:32:49 PM','DD-MON-RR HH:MI:SS AM') FROM DUAL UNION ALL
  6  SELECT 450  ,   25203       ,to_date('02-SEP-14 07:01:05 PM','DD-MON-RR HH:MI:SS AM') FROM DUAL UNION ALL
  7  SELECT 471  ,   25351       ,to_date('02-SEP-14 07:47:31 PM','DD-MON-RR HH:MI:SS AM') FROM DUAL UNION ALL
  8  SELECT 482  ,   25350       ,to_date('02-SEP-14 08:01:03 PM','DD-MON-RR HH:MI:SS AM') FROM DUAL UNION ALL
  9  SELECT 78   ,   24924       ,to_date('02-SEP-14 08:01:29 PM','DD-MON-RR HH:MI:SS AM') FROM DUAL UNION ALL
 10  SELECT 541  ,   26032       ,to_date('02-SEP-14 09:35:00 PM','DD-MON-RR HH:MI:SS AM') FROM DUAL UNION ALL
 11  SELECT 708  ,   26485       ,to_date('02-SEP-14 12:19:48 PM','DD-MON-RR HH:MI:SS AM') FROM DUAL UNION ALL
 12  SELECT 726  ,   26125       ,to_date('02-SEP-14 01:00:11 PM','DD-MON-RR HH:MI:SS AM') FROM DUAL UNION ALL
 13  SELECT 145  ,   26221       ,to_date('02-SEP-14 03:45:32 PM','DD-MON-RR HH:MI:SS AM') FROM DUAL UNION ALL
 14  SELECT 824  ,   26436       ,to_date('02-SEP-14 06:30:16 PM','DD-MON-RR HH:MI:SS AM') FROM DUAL UNION ALL
 15  SELECT 87  ,   26505       ,to_date('02-SEP-14 06:30:22 PM','DD-MON-RR HH:MI:SS AM') FROM DUAL UNION ALL
 16  SELECT 825  ,   26488       ,to_date('02-SEP-14 06:31:34 PM','DD-MON-RR HH:MI:SS AM') FROM DUAL UNION ALL
 17  SELECT 466  ,   26488       ,to_date('02-SEP-14 06:34:48 PM','DD-MON-RR HH:MI:SS AM') FROM DUAL UNION ALL
 18  SELECT 868   ,  26091       ,to_date('02-SEP-14 08:30:59 PM','DD-MON-RR HH:MI:SS AM') FROM DUAL UNION ALL
 19  SELECT 1356   , 28852       ,to_date('02-SEP-14 07:45:14 PM','DD-MON-RR HH:MI:SS AM') FROM DUAL UNION ALL
 20  SELECT 1342  ,  28852       ,to_date('02-SEP-14 07:45:27 PM','DD-MON-RR HH:MI:SS AM') FROM DUAL)
 21  SELECT 5 hours,
 22    COUNT(team_id)
 23  FROM DATA
 24  WHERE UPDATED BETWEEN to_date('02-SEP-14 10:00:01','DD-MON-RR HH24:MI:SS') AND to_date('02-SEP-14 14:59:59','DD-MON-RR HH24:MI:SS')
 25  UNION
 26  SELECT 6 hours,
 27    COUNT(team_id)
 28  FROM DATA
 29  WHERE UPDATED BETWEEN to_date('02-SEP-14 10:00:01','DD-MON-RR HH24:MI:SS') AND to_date('02-SEP-14 15:59:59','DD-MON-RR HH24:MI:SS')
 30  UNION
 31  SELECT 10 hours,
 32    COUNT(team_id)
 33  FROM DATA
 34  WHERE UPDATED BETWEEN to_date('02-SEP-14 10:00:01','DD-MON-RR HH24:MI:SS') AND to_date('02-SEP-14 19:59:59','DD-MON-RR HH24:MI:SS')
 35  UNION
 36  SELECT 24 hours,
 37    COUNT(team_id)
 38  FROM DATA
 39  WHERE UPDATED BETWEEN to_date('02-SEP-14 00:00:01','DD-MON-RR HH24:MI:SS') AND to_date('02-SEP-14 23:59:59','DD-MON-RR HH24:MI:SS')
 40  /

     HOURS COUNT(TEAM_ID)
---------- --------------
         5              4
         6              7
        10             15
        24             19

以时间间隔为例,我采用了不同的时间间隔,HOURS列是WHERE子句中提到的时间间隔。