我在Oracle中有一个表,其中TEMP有商店开门和关门时间。
| COMPANY_ID | DAY_OF_WEEK | SHOP OPEN TIME | SHOP CLOSE TIME |
|------------|-------------|---------------------|---------------------|
| shop 1 | 1 | +00 10:00:00.000000 | +00 21:30:00.000000 |
| shop 1 | 2 | +00 10:00:00.000000 | +00 21:30:00.000000 |
| shop 1 | 3 | +00 10:00:00.000000 | +00 21:30:00.000000 |
| shop 1 | 4 | +00 10:00:00.000000 | +00 21:30:00.000000 |
| shop 1 | 5 | +00 10:00:00.000000 | +00 21:30:00.000000 |
| shop 1 | 6 | +00 10:00:00.000000 | +00 21:30:00.000000 |
| shop 1 | 7 | +00 11:00:00.000000 | +00 18:00:00.000000 |
| shop 2 | 1 | +00 10:30:00.000000 | +00 20:00:00.000000 |
| shop 2 | 2 | +00 09:30:00.000000 | +00 22:00:00.000000 |
| shop 2 | 3 | +00 09:30:00.000000 | +00 22:00:00.000000 |
| shop 2 | 4 | +00 09:30:00.000000 | +00 22:00:00.000000 |
| shop 2 | 5 | +00 11:00:00.000000 | +00 18:00:00.000000 |
| shop 2 | 6 | +00 09:30:00.000000 | +00 22:00:00.000000 |
| shop 2 | 7 | +00 09:00:00.000000 | +00 22:00:00.000000 |
第1天是星期六
我有另一个表来记录投诉,当顾客投诉临时工时,我们会解决问题并计算解决问题所需的时间。如果商店在那个时间关门,我们不会考虑时间。所以如果商店在周一09:00到22:00营业,那么晚上22:00到早上09:00的时间就不会考虑。
抱怨表:
| SHOP | COMPLAIN NUMBER | COMPLAIN DAY TIME | RESOLVE DAY TIME | TIME TAKEN TO RESOLVE in minutes |
|-------|-------------------|---------------------|-------------------|-----------------------------------|
| SHOP1 | 1 | 01/10/2022 08:20 | 01/10/2022 16:10 | 310 |
| SHOP1 | 2 | 01/10/2022 08:20 | 06/10/2022 09:50 |
我手动计算了投诉编号1,解决查询所需的时间为310分钟。2022年10月1日是星期六,商店营业时间为上午11:00,根据商店营业和关门时间,解决投诉所需的时间为5小时10分钟,即310分钟,如果当天是星期一,我们看到周一的营业时间为上午10点,则解决投诉所需的时间为370分钟。(不同商店在不同日期的营业和关门时间可能不同)
在这个例子中,投诉和问题是同一天发生的,所以投诉比较容易,但是
如果投诉持续4或5天,我们应该如何计算,因为每天的营业时间和关门时间都不一样,所以在第二种情况下,所需的时间应该是4550分钟
2010年1月-570起投诉全天开放,因为投诉记录在商店开业前()
2010年2月-750起投诉全天开放
03/10-全天开放750例投诉
04/10-全天开放750例投诉
05/10-全天开放420例投诉
06/10-740投诉在商店关门前10分钟结束
总共是3980分钟,请暂停此问题目前在我们的队列中。当我们添加答案时,您将收到电子邮件通知
1条答案
按热度按时间toe950271#
要获得与商店营业时间的重叠,您可以使用分层查询或递归CTE将每个投诉拆分为单独的几天,并计算等效天数(从周日的1到周六的6),如下所示:
| 选购|投诉编号|投诉日时间|解析_天_时间|活动日|一周中的活动日|
| - -|- -|- -|- -|- -|- -|
| 商店1|一个|2022年10月1日08时20分|2022年10月1日16时10分|2022年10月1日上午10时00分|七个|
| 商店1| 2个|2022年10月1日08时20分|2022年10月6日21时20分|2022年10月1日上午10时00分|七个|
| 商店1| 2个|2022年10月1日08时20分|2022年10月6日21时20分|2022年10月2日上午10:00:00|一个|
| 商店1| 2个|2022年10月1日08时20分|2022年10月6日21时20分|2022年10月3日上午10时00分|2个|
| 商店1| 2个|2022年10月1日08时20分|2022年10月6日21时20分|2022年10月4日00:00:00|三个|
| 商店1| 2个|2022年10月1日08时20分|2022年10月6日21时20分|2022年10月5日上午10:00:00|四个|
| 商店1| 2个|2022年10月1日08时20分|2022年10月6日21时20分|2022年10月6日上午10:00:00|五个|
然后将这些天中的每一天加入到当天的商店时间中,并使用最小/最大来计算出该天的小时数,减去活动结束/开始时间,并将得到的天数乘以1440,以分钟为单位;然后总结每一个投诉的所有方面:
| 选购|投诉编号|投诉日时间|解析_天_时间|活动分钟数|
| - -|- -|- -|- -|- -|
| 商店1|一个|2022年10月1日08时20分|2022年10月1日16时10分|三百一十|
| 商店1| 2个|2022年10月1日08时20分|2022年10月6日21时20分|小行星3860|
fiddle也显示了中间计算。
我已经将第二个投诉的解决时间调整为21:20,因为该商店只营业到21:30,而您说“投诉在商店关门前10分钟结束”。这样该投诉的总时间为3860分钟-您似乎在计算中增加了一天,得到4550分钟。