qq_17811469 2021-12-07 21:26 采纳率: 60%
浏览 177
已结题

Oracle 函数或者 SQL查询

Oracle 中存有三条数据 分别如下:

img

我需要根据如下时间区间和地址匹配记录
起算点:2021-01-22 12:00:00
结算点:2021-01-27 23:45:00
地址:24
想要得到的结果是

img

我这里的用时 是换算成了分钟

如果起算点 >=开始时间 用于计算用时的起算点 = 起算点
如果起算点 < 开始时间 用于计算用时的起算点 = 开始时间

如果结算点 <= 结束时间 用于计算用时的结算点= 结算点
如果结算点 > 结束时间 用于计算用时的结算点= 结束时间

这个需求如何用 SQL查询或者函数实现。

  • 写回答

6条回答 默认 最新

  • togolife 2021-12-07 23:45
    关注
    获得7.15元问题酬金
    1. 计算分钟函数
    round(to_number(end-date-start_date)*1440)
    
    
    1. 计算一条记录时间
    round(
        to_number(
            to_date(min(结束时间, '2021-01-27 23:45:00'), 'yyyy-mm-dd hh24:mi:ss') -
            to_date(max(开始时间, '2021-01-22 12:00:00'), 'yyyy-mm-dd hh24:mi:ss')
        ) * 1440
    )
    
    
    
    1. 汇总
    select '24' as '地址', '2021-01-22 12:00:00' as '开始时间', '2021-01-27 23:45:00' as '结束时间',
    sum(round(
        to_number(
            to_date(min(结束时间, '2021-01-27 23:45:00'), 'yyyy-mm-dd hh24:mi:ss') -
            to_date(max(开始时间, '2021-01-22 12:00:00'), 'yyyy-mm-dd hh24:mi:ss')
        ) * 1440
    )) from table where 地址 = 24;
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月15日
  • 创建了问题 12月7日

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料