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