Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL-将表映射到;“时间光栅”;_Sql_Database_Oracle_Plsql - Fatal编程技术网

Oracle SQL-将表映射到;“时间光栅”;

Oracle SQL-将表映射到;“时间光栅”;,sql,database,oracle,plsql,Sql,Database,Oracle,Plsql,首先:请原谅我英语不好。我不是以英语为母语的人我尽力做到最好 我对oracle11下的sql有问题 这是我的数据表:(示例) 你看,用户和操作有不同的时间 我现在想做一个查询,它给我一个“每个用户和时间”的记录。。。 我想把它或多或少地映射到一个“时间光栅”。。通过此表中的datetime列生成。即使对于在特定时间没有输入的用户 i、 E.对于公司“1000” 用户数量因公司而异。。。(主要在4到25之间) 我用透视表试过了。但我认为应该有一个更简单的方法 为了实现这个目标?为了营救 with

首先:请原谅我英语不好。我不是以英语为母语的人我尽力做到最好

我对oracle11下的sql有问题

这是我的数据表:(示例)

你看,用户和操作有不同的时间

我现在想做一个查询,它给我一个“每个用户和时间”的记录。。。 我想把它或多或少地映射到一个“时间光栅”。。通过此表中的datetime列生成。即使对于在特定时间没有输入的用户

i、 E.对于公司“1000”

用户数量因公司而异。。。(主要在4到25之间)

我用透视表试过了。但我认为应该有一个更简单的方法 为了实现这个目标?

为了营救

with sample_data as (select 1000 company, to_date('10/09/2015 00:00:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userA' usr, 32 actions from dual union all
                     select 1000 company, to_date('10/09/2015 00:00:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userB' usr, 22 actions from dual union all
                     select 1000 company, to_date('10/09/2015 00:00:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userC' usr, 45 actions from dual union all
                     select 1001 company, to_date('10/09/2015 00:00:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userA' usr, 64 actions from dual union all
                     select 1001 company, to_date('10/09/2015 00:00:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userB' usr, 35 actions from dual union all
                     select 1001 company, to_date('10/09/2015 00:00:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userC' usr, 78 actions from dual union all
                     select 1000 company, to_date('10/09/2015 00:06:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userA' usr, 63 actions from dual union all
                     select 1000 company, to_date('10/09/2015 00:06:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userC' usr, 24 actions from dual union all
                     select 1000 company, to_date('10/09/2015 00:12:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userA' usr, 13 actions from dual union all
                     select 1000 company, to_date('10/09/2015 00:12:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userB' usr, 33 actions from dual union all
                     select 1000 company, to_date('10/09/2015 00:12:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userC' usr, 83 actions from dual union all
                     select 1000 company, to_date('10/09/2015 00:18:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userC' usr, 35 actions from dual union all
                     select 1000 company, to_date('10/09/2015 00:18:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userD' usr, 56 actions from dual),
           dates as (select distinct company, datetime from sample_data)
select sd.company,
       dts.datetime,
       sd.usr,
       nvl(sd.actions, 0) actions
from   dates dts
       left outer join sample_data sd partition by (sd.usr, sd.company) on (dts.datetime = sd.datetime)
where  dts.company = sd.company
order by 1, 2, 3;

   COMPANY DATETIME              USR      ACTIONS
---------- --------------------- ----- ----------
      1000 10/09/2015 00:00:00   userA         32
      1000 10/09/2015 00:00:00   userB         22
      1000 10/09/2015 00:00:00   userC         45
      1000 10/09/2015 00:00:00   userD          0
      1000 10/09/2015 00:06:00   userA         63
      1000 10/09/2015 00:06:00   userB          0
      1000 10/09/2015 00:06:00   userC         24
      1000 10/09/2015 00:06:00   userD          0
      1000 10/09/2015 00:12:00   userA         13
      1000 10/09/2015 00:12:00   userB         33
      1000 10/09/2015 00:12:00   userC         83
      1000 10/09/2015 00:12:00   userD          0
      1000 10/09/2015 00:18:00   userA          0
      1000 10/09/2015 00:18:00   userB          0
      1000 10/09/2015 00:18:00   userC         35
      1000 10/09/2015 00:18:00   userD         56
      1001 10/09/2015 00:00:00   userA         64
      1001 10/09/2015 00:00:00   userB         35
      1001 10/09/2015 00:00:00   userC         78
  -------------------------------------------------------
  | company  |      datetime       |  user   | actions  |
  -------------------------------------------------------
  |  1000    | 2015-09-10 00:00:00 |  userA   |   32     |
  |  1000    | 2015-09-10 00:00:00 |  userB   |   12     |
  |  1000    | 2015-09-10 00:00:00 |  userC   |   45     |
  |  1000    | 2015-09-10 00:00:00 |  userD   |   0      |

  |  1000    | 2015-09-10 00:06:00 |  userA   |   63     |
  |  1000    | 2015-09-10 00:06:00 |  userB   |   0      |
  |  1000    | 2015-09-10 00:06:00 |  userC   |   24     |
  |  1000    | 2015-09-10 00:06:00 |  userD   |   0      |

  |  1000    | 2015-09-10 00:12:00 |  userA   |   0      |
  |  1000    | 2015-09-10 00:12:00 |  userB   |   0      |
  |  1000    | 2015-09-10 00:12:00 |  userC   |   83     |
  |  1000    | 2015-09-10 00:12:00 |  userD   |   0      |
  -------------------------------------------------------
with sample_data as (select 1000 company, to_date('10/09/2015 00:00:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userA' usr, 32 actions from dual union all
                     select 1000 company, to_date('10/09/2015 00:00:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userB' usr, 22 actions from dual union all
                     select 1000 company, to_date('10/09/2015 00:00:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userC' usr, 45 actions from dual union all
                     select 1001 company, to_date('10/09/2015 00:00:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userA' usr, 64 actions from dual union all
                     select 1001 company, to_date('10/09/2015 00:00:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userB' usr, 35 actions from dual union all
                     select 1001 company, to_date('10/09/2015 00:00:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userC' usr, 78 actions from dual union all
                     select 1000 company, to_date('10/09/2015 00:06:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userA' usr, 63 actions from dual union all
                     select 1000 company, to_date('10/09/2015 00:06:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userC' usr, 24 actions from dual union all
                     select 1000 company, to_date('10/09/2015 00:12:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userA' usr, 13 actions from dual union all
                     select 1000 company, to_date('10/09/2015 00:12:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userB' usr, 33 actions from dual union all
                     select 1000 company, to_date('10/09/2015 00:12:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userC' usr, 83 actions from dual union all
                     select 1000 company, to_date('10/09/2015 00:18:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userC' usr, 35 actions from dual union all
                     select 1000 company, to_date('10/09/2015 00:18:00', 'dd/mm/yyyy hh24:mi:ss') datetime, 'userD' usr, 56 actions from dual),
           dates as (select distinct company, datetime from sample_data)
select sd.company,
       dts.datetime,
       sd.usr,
       nvl(sd.actions, 0) actions
from   dates dts
       left outer join sample_data sd partition by (sd.usr, sd.company) on (dts.datetime = sd.datetime)
where  dts.company = sd.company
order by 1, 2, 3;

   COMPANY DATETIME              USR      ACTIONS
---------- --------------------- ----- ----------
      1000 10/09/2015 00:00:00   userA         32
      1000 10/09/2015 00:00:00   userB         22
      1000 10/09/2015 00:00:00   userC         45
      1000 10/09/2015 00:00:00   userD          0
      1000 10/09/2015 00:06:00   userA         63
      1000 10/09/2015 00:06:00   userB          0
      1000 10/09/2015 00:06:00   userC         24
      1000 10/09/2015 00:06:00   userD          0
      1000 10/09/2015 00:12:00   userA         13
      1000 10/09/2015 00:12:00   userB         33
      1000 10/09/2015 00:12:00   userC         83
      1000 10/09/2015 00:12:00   userD          0
      1000 10/09/2015 00:18:00   userA          0
      1000 10/09/2015 00:18:00   userB          0
      1000 10/09/2015 00:18:00   userC         35
      1000 10/09/2015 00:18:00   userD         56
      1001 10/09/2015 00:00:00   userA         64
      1001 10/09/2015 00:00:00   userB         35
      1001 10/09/2015 00:00:00   userC         78