将事务数据转换为分析形式 - Oracle sql

时间:2017-05-16 08:55:35

标签: sql oracle plsql pivot normalization

我有一个每个不同渠道的用户状态变化表,如下所示:

user_id   channel_id   insert_time     status
1111       3           1/1/2017 0:00   AVAILABLE
1111       3           1/1/2017 0:15   BUSY
1111       3           1/1/2017 0:30   NOT AVIALABLE
1111       3           1/1/2017 1:30   AVIALABLE
1111       3           1/1/2017 3:10   BUSY
1111       3           1/1/2017 5:00   NOT AVIALABLE
1111       4           1/1/2017 0:00   AVAILABLE
1111       4           1/1/2017 0:15   BUSY
1111       4           1/1/2017 0:30   NOT AVIALABLE
1111       4           1/1/2017 1:30   AVIALABLE
1111       4           1/1/2017 3:10   BUSY
1111       4           1/1/2017 5:00   NOT AVIALABLE
2222       3           1/1/2017 0:00   AVAILABLE
2222       3           1/1/2017 0:15   BUSY
2222       3           1/1/2017 0:30   NOT AVIALABLE
2222       3           1/1/2017 1:30   AVIALABLE
2222       3           1/1/2017 3:10   BUSY
2222       3           1/1/2017 5:00   NOT AVIALABLE

例如:用户1111在00:00到00:15之间的频道3中可用,在00:15到00:30之间忙碌,依此类推。

为了分析我需要将其转换为这种结构的数据:

user_id   channel_id   day   hour   available minutes   not available minutes   busy minutes
1111   3   1/1/2017   0   15   30   15
1111   3   1/1/2017   1   30   30   0
1111   3   1/1/2017   2   60   0   0
1111   3   1/1/2017   3   10   0   50
1111   3   1/1/2017   4   0   0   60
1111   4   1/1/2017   0   15   30   15
1111   4   1/1/2017   1   30   30   0
1111   4   1/1/2017   2   60   0   0
1111   4   1/1/2017   3   10   0   50
1111   4   1/1/2017   4   0   0   60
2222   3   1/1/2017   0   15   30   15
2222   3   1/1/2017   1   30   30   0
2222   3   1/1/2017   2   60   0   0
2222   3   1/1/2017   3   10   0   50
2222   3   1/1/2017   4   0   0   60

包括状态未更改的天/小时数据(如凌晨4点)。 它还需要一个24小时的表,这意味着每个用户每天将有48行(每天24小时2个频道)。

如何使用Oracle SQL查询(尽可能简单)? +如果可以的话,它需要快速运行,因为我每个用户和成千上万的用户有数千行..

谢谢, ë

0 个答案:

没有答案