计算 SQL Server 中不包括重叠时间和中断的总时间

2023-12-09

从选择查询的开始时间和结束时间列表中,我需要找出不包括重叠时间和休息时间的总时间。

StartTime                   EndTime
2014-10-01 10:30:00.000     2014-10-01 12:00:00.000 -- 90 mins
2014-10-01 10:40:00.000     2014-10-01 12:00:00.000 --0 since its overlapped with     previous
2014-10-01 10:42:00.000     2014-10-01 12:20:00.000 -- 20 mins excluding overlapped time
2014-10-01 10:40:00.000     2014-10-01 13:00:00.000 -- 40 mins
2014-10-01 10:44:00.000     2014-10-01 12:21:00.000 -- 0 previous ones have already covered this time range
2014-10-13 15:50:00.000     2014-10-13 16:00:00.000 -- 10 mins

因此,本例中的总时间应为 160 分钟。

我不想使用这么多循环来完成这个任务。寻找一些简单的解决方案。


DECLARE @table TABLE (StartTime DateTime2, EndTime DateTime2)

INSERT INTO @table SELECT '2014-10-01 10:30:00.000', '2014-10-01 12:00:00.000'
INSERT INTO @table SELECT '2014-10-01 10:40:00.000', '2014-10-01 12:00:00.000'
INSERT INTO @table SELECT '2014-10-01 10:42:00.000', '2014-10-01 12:20:00.000'
INSERT INTO @table SELECT '2014-10-01 10:40:00.000', '2014-10-01 13:00:00.000'
INSERT INTO @table SELECT '2014-10-01 10:44:00.000', '2014-10-01 12:21:00.000'
INSERT INTO @table SELECT '2014-10-13 15:50:00.000', '2014-10-13 16:00:00.000'


;WITH addNR AS ( -- Add row numbers

    SELECT StartTime, EndTime, ROW_NUMBER() OVER (ORDER BY StartTime, EndTime) AS RowID
    FROM @table AS T

), createNewTable AS ( -- Recreate table according overlap time

    SELECT StartTime, EndTime, RowID 
    FROM addNR
    WHERE RowID = 1

    UNION ALL

    SELECT 
        CASE 
            WHEN a.StartTime <= AN.StartTime AND AN.StartTime <= a.EndTime THEN a.StartTime 
            ELSE AN.StartTime END AS StartTime, 
        CASE WHEN a.StartTime <= AN.EndTime AND AN.EndTime <= a.EndTime THEN a.EndTime 
            ELSE AN.EndTime END AS EndTime,
        AN.RowID 
    FROM addNR AS AN
    INNER JOIN createNewTable AS a
        ON a.RowID + 1 = AN.RowID

), getMinutes AS ( -- Get difference in minutes
    SELECT DATEDIFF(MINUTE,StartTime,MAX(EndTime)) AS diffMinutes
    FROM createNewTable
    GROUP BY StartTime
)
SELECT SUM(diffMinutes) AS Result
FROM getMinutes

结果是160

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算 SQL Server 中不包括重叠时间和中断的总时间 的相关文章

随机推荐

  • 使用谷歌应用程序脚本按日期过滤数组

    我有一个谷歌电子表格 它是一个 2 列表格 其中 A 列日期 我确定是日期 并且所有日期函数在所有列上都可以正常工作 和 B 列文本 通过谷歌应用程序脚本 我获得了范围内的所有值 var sheet SpreadsheetApp openB
  • Plotly 分散 3D 相机,减少空白

    我正在绘制 3d 散点图spyderIDE 并且运行良好 除此之外 我试图将特定的相机视图保存为 png 格式 这就是我遇到问题的地方 本文 https nbviewer org github etpinard plotly misc nb
  • 在matplotlib散点图中绘制从x=0到数据点的水平线(水平茎图)

    考虑以下情节 由该函数产生 def timeDiffPlot dataA dataB saveto None leg None labels list dataA graph figure figsize screenMedium ax g
  • 使用spark-csv写入单个CSV文件

    我在用https github com databricks spark csv 我试图编写一个 CSV 但无法 它正在创建一个文件夹 需要一个 Scala 函数 它将接受路径和文件名等参数并写入该 CSV 文件 它正在创建一个包含多个文件
  • 如何在 React Native 中设置默认字体系列?

    React Native 中是否有与此 CSS 等效的内容 以便应用程序在任何地方都使用相同的字体 body font family Open Sans 在每个文本节点上手动应用它似乎过于复杂 推荐的方法是创建您自己的组件 例如 MyApp
  • 单例模式性能问题

    我正在审查一段现有的代码 它使用了大量的单例类和访问 我正在努力提高这段代码的性能 我想到的一件事是优化 Singleton getInstance 代码 我倾向于将其替换为具有两次调用的结构 而不是使用 Singleton getInst
  • 可执行加密检查防盗版措施

    我读了一篇非常有趣的博客 内容是关于在您的应用程序中实施一些反盗版保护 其中一些不再工作 另一些则可以 最后列出的 2 个在一定程度上仍然有效 http shmoopi wordpress com 2011 06 19 27 我感兴趣的是最
  • 无需 JavaScript 即可选择性地设置后备字体样式?

    我见过几种使用 JavaScript 设置后备字体样式的方法 例如 Google 和 Typekit 开发的一款 但我很好奇是否有任何方法可以在不使用 JavaScript 的情况下做到这一点 例如 我想使用 Arialheight 10p
  • 应用浮动时的 css 显示属性

    当元素浮动时 不同的显示属性如何影响布局 或者 这些类之间有什么区别 如果有的话 div foo display block float left div foo2 display inline float left div foo3 di
  • Python 3.7.0 Heroku 构建包问题

    我读过一些有同样问题的人 但没有任何建议有效 我正在尝试将一个愚蠢的项目部署到 Heroku 但没有任何效果 在此行下方您可以看到以下消息 写入对象 100 100 100 55 42 MiB 625 00 KiB s 完成 总共 100
  • 放大图像时控制平移(锚定点)

    我正在编写一个简单的图像查看器 并实现平移和缩放功能 分别使用鼠标拖动和鼠标滚轮滚动 我已经成功实现了平移 简单模式 和天真的 进入左上角 zoom 我现在想细化缩放 以便缩放时用户鼠标的坐标成为 焦点 也就是说 缩放时 平移会更新 以便用
  • Google Drive API:如何在 appDataFolder 中创建文件?

    我正在阅读这个文档 https developers google com drive api v3 appdata 这是我的代码 var fileMetadata name config json parents appDataFolde
  • 如何允许列表append()方法返回新列表

    我想做这样的事情 myList 10 20 30 yourList myList append 40 不幸的是 列表追加不会返回修改后的列表 那么 我怎样才能允许append返回新列表 See also Why do these list
  • 不使用 coreLocation 框架的 iPhone 位置

    我需要在不使用 coreLocation 框架的情况下获取 iphone 位置 有没有什么解决办法呢 等待你的回复 提前致谢 使用私有 API 和lot努力程度 是的 在实践中 没有
  • 如何通过 pandas 0.19.2 中其他行的唯一对来标记行

    我有一个数据框df像这样但更大 ID 0 ID 1 location 0 a b 1 1 a c 1 2 a b 0 3 d c 0 4 a c 0 5 a c 1 我想添加一个列来标识前两个 例如 ID 0 ID 1 location g
  • 如何使用锚标记下载文件

    为什么这不起作用 下载 html a href jsplogin jar download a The jsplogin jar文件位于同一文件夹中download html file 当我单击下载链接时jsplogin jar应该下载 但
  • Google 电子钱包服务器是否会对每次订阅续订进行回调?

    我有一个使用订阅 API 的钱包集成 Web 产品 如 中所述文档 模拟了首次付款和取消 一切正常 Google 电子钱包服务器是否会在每次定期续订时调用服务器 显然客户端当时可能不在线 定期付款自动发生 无需回调至商家服务器 处理定期付款
  • 设置 UILabel 行距

    如何修改多行中的行间距 行距 UILabel Edit 显然NSAttributedString在 iOS 6 及更高版本上可以做到这一点 而不是使用NSString要设置标签的文本 请创建一个NSAttributedString 为其设置
  • 将自定义对象从 JList 拖放到 JLabel 中

    我有一个包含自定义对象 ArrayList 的 JList 并且我正在尝试创建拖放到字段中的操作 我无法理解如何打包和接收 Transferable 中的对象 据我所知 这大约是 import java awt import java aw
  • 计算 SQL Server 中不包括重叠时间和中断的总时间

    从选择查询的开始时间和结束时间列表中 我需要找出不包括重叠时间和休息时间的总时间 StartTime EndTime 2014 10 01 10 30 00 000 2014 10 01 12 00 00 000 90 mins 2014