【问题标题】:time difference between two date removing closing time两个日期之间的时间差去除关闭时间
【发布时间】:2022-09-23 23:38:53
【问题描述】:

我的公司在所有地点都有许多商店。他们提出了将物品运送到他们可以出售的商店的请求。我们想了解公司在几分钟内交付商品所需的时间。但是,我们不想在商店关闭时的经过时间中添加时间,即

让我们考虑开店和关店时间是

现在过去的时间

当我扣除投诉时间和解决时间时,我会得到calculatable elasped time in minutes,但我需要必需elapsed time in minutes,所以在第一种情况下,在 2090 分钟内,当商店关门时会扣除这些分钟。我需要编写一个 oracle 查询来计算绿色的required elapsed time in minutes

帮助我们可以写什么查询。

  • Please do not upload images of code/data/errors when asking a question.。将数据作为格式化文本复制并粘贴到您的请求中。
  • 请显示您用于获取总经过时间的查询。然后我们可以在此基础上获取净运行时间。
  • 你怎么得到1430分钟?商店关门时提出投诉。所以第一天我们只计算商店再次营业的最后两个小时。第二天,我们数了九个小时,直到 9:00。然后商店又关门了。案件在再次开庭之前就解决了。这使得 (2 + 9) * 60 = 660 分钟。我误解了请求吗?
  • 商店 1 于上午 09:00 开放,并在 10:12 提出投诉,所以这是在工作时间,所以第一天它的总 708 分钟请求是开放的,第二天关闭前花了 722 分钟,总共 1430 分钟关闭它。
  • 请显示您用于获取总经过时间的查询。 Tan我们可以在此基础上获得净运行时间。:这是在excel中计算的,寻找oracle sql查询。

标签: oracle oracle-sqldeveloper


【解决方案1】:

获得净时间的一个公式如下:

  • 为所涉及的每一天加上开放时间。对于您的第一个示例,这是 2021 年 1 月 11 日和 2021 年 1 月 12 日两天,每天开放 13 小时(09:00 - 22:00)。这使得 26 小时。
  • 如果第一天在商店开张后开始,则减去差额。 10:12 - 09:00 = 1:12 = 72 分钟。
  • 如果最后一天在商店关门前结束,则减去差额。 22:00 - 21:02 = 0:58 = 58 分钟。

Oracle 没有TIME 数据类型,所以我假设您使用Oracle 的日期时间数据类型,他们调用DATE 来存储开始和结束时间,我们必须忽略日期部分。您可能也在使用 DATE 类型来表示抱怨时间和分辨率时间。

在下面的查询中,我立即将时间部分转换为分钟,因此以后的计算变得更易读。

with s as
(
  select
    shop,
    extract(hour from opening_time) * 60 + extract(minute from opening_time) as opening_minute,
    extract(hour from closing_time) * 60 + extract(minute from closing_time) as closing_minute
  from shops
)
, r as
(
  select 
    request, shop, complain_time, resolution_time,
    trunc(complain_time) as complain_day,
    trunc(resolution_time) as resolution_day,
    extract(hour from complain_time) * 60 + extract(minute from complain_time) as complain_minute,
    extract(hour from resolution_time) * 60 + extract(minute from resolution_time) as resolution_minute
  from requests
)
select
  r.request, r.shop, r.complain_time, r.resolution_time,
  (r.resolution_day - r.complain_day + 1) * 60
  - case when r.complain_minute > s.opening_minute) then r.complain_minute - s.opening_minute else 0 end
  - case when r.resolution_minute < s.opening_minute) then s.closing_minute - r.resolution_minute else 0 end
    as net_duration_in_minutes
  from r
join s on s.shop = r.shop
order by r.request;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 2017-05-16
    • 2021-12-24
    • 2017-09-14
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多