【发布时间】:2020-12-13 19:57:57
【问题描述】:
我一直在尝试解决这个问题,但到目前为止还没有解决。我正在使用 Oracle。
我有一组如下所示的数据:
| USER | ACTIVITY | START_TIME | END_TIME | DURATION |
|--------|------------|-----------------|-----------------|----------|
| jsmith | Front Desk | 2020-08-24 8:00 | 2020-08-24 9:30 | 90 |
| jsmith | Phones | 2020-08-24 8:15 | 2020-08-24 8:45 | 30 |
| jsmith | Phones | 2020-08-24 9:45 | 2020-08-24 9:50 | 5 |
| bjones | Phones | 2020-08-24 9:00 | 2020-08-24 9:10 | 10 |
| bjones | Front Desk | 2020-08-24 9:05 | 2020-08-24 9:15 | 10 |
| bjones | Phones | 2020-08-24 9:15 | 2020-08-24 9:45 | 30 |
上面的输出可以从以下查询生成:
SELECT
USER,
ACTIVITY,
START_TIME,
END_TIME,
DURATION
FROM USER_ACTIVITIES
WHERE USER IN ('jsmith', 'bjones')
AND START_TIME BETWEEN '2020-08-24 00:00:00' AND '2020-08-25 00:00:00'
ORDER BY USER, START_TIME, END_TIME
;
考虑到一些活动相互重叠,我需要计算每个用户的总“忙碌”时间。使用现有查询,我将得到 jsmith 的每个用户的总持续时间为 125,bjones 的总持续时间为 50,但是由于某些活动重叠,这并不能反映用户忙碌的总时间。
我正在寻找的输出是用户每天的总忙碌时长:
| USER | DATE | DURATION |
|--------|------------|----------|
| jsmith | 2020-08-24 | 95 |
| bjones | 2020-08-24 | 45 |
对此的任何帮助将不胜感激。
【问题讨论】:
标签: sql oracle datetime window-functions gaps-and-islands