我有一个每个不同渠道的用户状态变化表,如下所示:
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查询(尽可能简单)? +如果可以的话,它需要快速运行,因为我每个用户和成千上万的用户有数千行..
谢谢, ë