SQL Server - 重叠数据的累积总和 - 获取总和达到给定值的日期

2023-12-04

在我们公司,我们的客户执行我们在不同表中记录的各种活动 - 面试出勤、课程出勤和其他一般活动。 我有一个数据库视图,它将所有这些表中的数据结合在一起,为我们提供了如下所示的 ActivityView。 正如您所看到的,一些活动是重叠的 - 例如,在参加面试时,客户可能一直在执行简历更新活动。

+----------------------+---------------+---------------------+-------------------+
| activity_client_id   | activity_type | activity_start_date | activity_end_date |
+----------------------+---------------+---------------------+-------------------+
|                  112 | Interview     | 2015-06-01 09:00    | 2015-06-01 11:00  |
|                  112 | CV updating   | 2015-06-01 09:30    | 2015-06-01 11:30  |
|                  112 | Course        | 2015-06-02 09:00    | 2015-06-02 16:00  |
|                  112 | Interview     | 2015-06-03 09:00    | 2015-06-03 10:00  |
+----------------------+---------------+---------------------+-------------------+

每个客户都有一个“注册日期”,记录在客户表上,这是他们加入我们计划的时间。这是我们的示例客户:

+-----------+---------------------+
| client_id | client_sign_up_date |
+-----------+---------------------+
|       112 | 2015-05-20          |
+-----------+---------------------+

我需要创建一个显示以下列的报告:

+-----------+---------------------+--------------------------------------------+
| client_id | client_sign_up_date | date_client_completed_5_hours_of_activity |
+-----------+---------------------+--------------------------------------------+

我们需要这份报告来了解我们的计划有多有效。该计划的一个重要目标是我们让每位客户尽快完成至少 5 小时的活动。 因此,这份报告将告诉我们每个客户从注册开始需要多长时间才能达到这个数字。

更棘手的是,当我们计算 5 小时的总活动时,我们必须对重叠活动进行折扣:

在上面的样本数据中,客户在 09:00 至 11:00 之间参加了采访。
同日上午09:30至11:30还进行了简历更新活动。 对于我们的计算,这将给他们一天 2.5 小时(150 分钟)的总活动 - 我们只会计算 30 分钟的简历更新,因为面试与该时间重叠直至 11:00。

因此,我们的示例客户的报告将给出以下结果:

+-----------+---------------------+--------------------------------------------+
| client_id | client_sign_up_date | date_client_completed_5_hours_of_activity |
+-----------+---------------------+--------------------------------------------+
|       112 | 2015-05-20          | 2015-06-02                                 |
+-----------+---------------------+--------------------------------------------+

所以我的问题是如何使用 select 语句创建报告? 我可以通过编写一个存储过程来弄清楚如何做到这一点,该存储过程将循环遍历视图并将结果写入报告表。 但我更愿意避免使用存储过程并使用一个 select 语句来即时提供报告。

我正在使用 SQL Server 2005。


请参阅 SQL Fiddlehere.

with tbl as (
  -- this will generate daily merged ovelaping time
  select distinct
    a.id
    ,(
        select min(x.starttime) 
        from act x 
        where x.id=a.id and ( x.starttime between a.starttime and a.endtime
          or a.starttime between x.starttime and x.endtime )
    ) start1
    ,(
        select max(x.endtime) 
        from act x 
        where x.id=a.id and ( x.endtime between a.starttime and a.endtime
          or a.endtime between x.starttime and x.endtime )
    ) end1
  from act a

), tbl2 as 
(
  -- this will add minute and total minute column
  select 
    * 
    ,datediff(mi,t.start1,t.end1) mi
    ,(select sum(datediff(mi,x.start1,x.end1)) from tbl x where x.id=t.id and x.end1<=t.end1) totalmi
  from tbl t
), tbl3 as 
(
  -- now final query showing starttime and endtime for 5 hours other wise null in case not completed 5(300 minutes) hours
  select 
    t.id
    ,min(t.start1) starttime
    ,min(case when t.totalmi>300 then t.end1 else null end) endtime
  from tbl2 t
  group by t.id
)
-- final result 
select *
from tbl3
where endtime is not null
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server - 重叠数据的累积总和 - 获取总和达到给定值的日期 的相关文章

  • 如何为不存在的值创建一行并用 0 值填充计数?

    在 SQL Server 中 我对数据上的用户年龄组运行查询 其中 在某些年里 每个年龄组的用户数为零 例如 2013 年有 18 21 年龄组的用户 因此查询返回下一个年龄组 22 25 作为第一行 因为没有包含 18 21 的条目 相反
  • SQL Server:读取数据库图表的权限

    您能否告知 授予用户读取 SQL Server 2005 中数据库图表的权限需要什么权限 多谢 From BOL http msdn microsoft com en us library ms186345 28SQL 90 29 aspx
  • 是否可以在MySQL UDF中的IF条件中声明游标

    我可以在 if 语句中声明游标吗 如果可能的话我怎样才能做到 因为我刚刚做了这样的光标 CREATE FUNCTION fn test ProductID BIGINT 20 RETURNS DECIMAL 10 2 BEGIN DECLA
  • 生成总和恒定的随机数

    我在想是否有办法生成一组随机数 其总和始终是一个常数 例如 20 可以分为 5 个数字 1 2 3 4 10 我不在乎这 5 个数字分别是什么 只要它们的总和等于 20 有没有办法以编程方式执行此操作 为了获得均匀分布 技巧是将总和视为一条
  • 如何在 SQL Server 2005 Management Studio 中创建 SQL Server 2005 存储过程模板?

    如何在 SQL Server 2005 Management Studio 中创建 SQL Server 2005 存储过程模板 我认为另一个小金块将帮助人们开发并提高数据库开发的效率 当我开发软件解决方案时 我非常喜欢存储过程和函数 我喜
  • VS C#/SQL Server Compact 安装故障排除 - “事件日志文件已满”消息

    我正在尝试开发一个小型 C 应用程序 使用 MS Visual Express 和 SQL Server 但在尝试找出弹出的错误对话框时遇到问题 事件日志文件已满 我正在遵循这些说明 http msdn microsoft com en u
  • Pandas read_sql 读取时更改大量 ID

    我将 Oracle 数据库转移到 SQL Server 一切似乎都很顺利 各种 ID 列都是很大的数字 因此我不得不使用 Decimal 因为它们对于 BigInt 来说太大了 我现在尝试使用 pandas read sql 使用 pyod
  • 帮助将二进制图像数据从 SQL Server 读取到 PHP 中

    我似乎无法找到将二进制数据从 SQL 服务器读取到 PHP 的方法 我正在开发一个项目 需要能够将图像直接存储在 SQL 表中 而不是文件系统上 目前 我一直在使用这样的查询 插入 myTable 文档 选择 从 OPENROWSET BU
  • SQL Server xp_cmdshell

    有没有其他方法可以通过以下方式获取文件名列表T SQL以外 INSERT INTO backups filename EXEC master sys xp cmdshell DIR b c some folder with sql back
  • 为什么 SQL Server 不推荐使用 SET ANSI_PADDING OFF?

    根据 MSDN BOL 在线书籍 SET ANSI PADDING http msdn microsoft com en us library ms187403 aspx 在 Microsoft SQL Server 的未来版本中 ANSI
  • DBCC命令是存储过程还是函数?

    应该是什么DBCC命令被调用 DBCC 过程还是 DBCC 函数 这很令人困惑 因为DBCC PAGE可以在不加前缀的情况下执行EXEC语句很像存储过程 但EXEC DBCC PAGE 1 1 1 3 抛出错误 语法错误 消息 156 关键
  • 如何从时区名称获取时区偏移量

    我有一个时区名称 例如America Vancouver保存在 SQL Server 数据库中 我想从 SQL 中的时区名称获取 UTC 偏移量 例如America Vancouver has 08 00抵消 那么如何用 SQL 编写查询呢
  • SQL 性能,使用 OPTION (FAST n)

    谁能告诉我在 SQL 查询中使用 OPTION FAST n 有什么缺点 比如我这么快就抓取了10万条记录 但这对SQL Server的其他进程有影响吗 我正在接近我的问题 我必须每周运行一次数据处理 因此 第一个结果会在 5 7 秒后出现
  • EF4 和 SQL Server 2000

    我使用 EF4 和 SQL Server 2005 开发了我的网站 但当转移到临时站点时 发现他们使用 SQL Server 2000 现在我收到此错误 我认为该错误与 SQL Server 2000 有关 Incorrect syntax
  • 从多行中获取/选择值到sql server中的1行中

    我有一个表格 每列都有一些图像 Acd unq id Emp unq id Acd BImg1 Acd BImg2 Acd RImg1 Acd RImp2 Acd RImg3 Acd Active 1 1745 BinaryImg Bina
  • .net Framework 4.0 中地理 SQL Server 数据类型的 C# 等效项是什么?

    net web应用程序使用 net 4 0框架 我有一个存储过程 它接受 sql server 2008 R2 中的地理数据类型 我想将 C 代码中的数据插入 SQL Server 但我无法找到应在 C 中使用哪种与 SQL Server
  • SQL 中的代码重用和模块化

    代码重用和模块化对于 SQL 存储过程编程来说是一个好主意吗 如果是这样 将这些功能添加到 SQL 存储过程代码库的最佳方法是什么 我通常为常见且重复的任务创建标量值函数 我发现它不仅可以简化与现有程序类似的新程序的开发 而且还有助于错误跟
  • 查询链接服务器时登录失败

    我正在尝试在 SQL Server 中创建链接服务器 Create the link to server uranium EXEC master dbo sp addlinkedserver server N uranium srvprod
  • 随机排列每行的列值

    我正在使用 C NET 开发多项选择题考试生成器 每次做出报告时 都会在数据库中随机挑选问题 并随机调整选项 我可以做随机问题部分 但我不能做选择的洗牌 我有一张表 其中一行如下 question answer distractor1 di
  • 导入到 SQL Server 时忽略 Excel 文件中的列

    我有多个具有相同格式的 Excel 文件 我需要将它们导入 SQL Server 我当前遇到的问题是 有两个文本列我需要完全忽略 因为它们是自由文本 并且某些行的字符长度超出了服务器允许我导入的长度 这会导致截断错误 因为我的分析不需要这些

随机推荐

  • 使用语义标记进行延迟图像加载

    我有一个图像非常丰富的网站 为了节省用户的带宽 我想在图像进入视口时延迟加载图像 有各种 jQuery 插件和类似的东西可以实现这一点 这是以放置实际图像网址而不是在src属性但在其他地方 这使得标记不太好 更糟糕的是 搜索引擎爬虫不太容易
  • 当状态栏旋转时隐藏时调整视图

    我四处浏览寻找这个问题的答案 但我只找到了有类似问题的人 而不是这个确切的问题 所以希望这里有人可以帮助我 我有一个 iPad 应用程序 在 iPad 上 当您纵向或横向握住 iPad 时 始终会显示带有时钟和电池的状态栏 出于这个原因 我
  • Visual Studio 2010 中未解析的外部符号

    我来自 Xcode 尝试在 Visual Studio 2010 中编译项目 但出现以下错误 2 gt ofxCLeye obj error LNK2019 unresolved external symbol struct GUID cd
  • 如何获得像slashdot的评论过滤菜单那样的固定位置菜单

    Slashdot 有一个小部件 可让您调整评论阈值以过滤掉经过修改的评论 如果您滚动到页面顶部 它将位于一个位置 当您向下滚动时 在某个时刻 其原始主页即将滚出页面 它将切换到固定位置 并保留在屏幕上 要查看示例 请单击here 我的问题是
  • 来自右值的非常量引用的初始化无效

    所以我有以下功能 void scan std istream is Handler h 我想以不同的方式调用它 例如 scan std cin Handler scan std ifstream myfile myhandler 编译器抱怨
  • 当 Web 应用程序在 Maven 驱动的 Vaadin 14 Web 应用程序中启动时,将我的 Java 代码加载的数据或配置文件放在哪里

    在由 Plain Java Servlet 风格创建的 Vaadin 14 Web 应用程序项目中瓦丁起始页 有许多由 Maven POM 文件过程自动创建的文件夹 当我的网络应用程序启动时 我将加载和解析的数据文件或配置文件放在哪里 我的
  • 未找到 NSS 字符串编码

    我下载了一个 html 页面 并尝试使用以下命令将其从 NSData 编码为 NSString NSString string NSString alloc initWithData receivedData encoding NSISOL
  • Google Chrome 扩展程序有什么方法可以增加本地存储空间吗?

    我认为 HTML5 本地存储每个域最多可以存储 5MB Google Chrome 扩展程序可以指定域来增加存储空间吗 您只能在清单中为扩展程序的存储请求无限空间 属于其他域的存储无法更改 permissions unlimitedStor
  • Perl 更改调用者的工作目录

    我想编写一个 perl 脚本 将其工作目录更改为其他位置 执行某些操作 然后在从 shell 调用它后将我留在该目录中 chdir只做第一部分 如何更改调用者的工作目录 This is可能的 但是 您必须打开其中之一 dev mem设备处于
  • 使用 Facebook Graph Api 搜索帖子

    我想使用图形 API 搜索过去 30 天的数据的帖子 新闻源 这样做的最佳做法是什么 Facebook Graph API 是否有 API 限制来限制 HTTP 请求的请求 注意 以下内容都不再有效 从 Facebook Graph API
  • NSDate isEqualToDate:不起作用 - 它是否查看秒和分秒?

    我不明白为什么这个方法不起作用 使用 isEqualToDate 时是否查看秒数和分秒数 Test that the NSDate category s DatePlusDays method works void testNSDateCa
  • 在 JavaScript 中通过 ID 引用 ASP.NET 控件?

    当 ASP NET 控件呈现时 它们的 id 有时会发生变化 就像它们位于命名容器中一样 Button1实际上可能有一个 idctl00 ContentMain Button1例如 当它被渲染时 我知道您可以将 JavaScript 作为字
  • jQuery Mobile 默认选项卡

    我想在 jQuery Mobile 中设置默认选项卡 我的源代码 div div ul li a href one one a li li a href two two a li li a href ajax content html th
  • 将 bash 脚本添加到路径

    我想向 linux PATH 添加一个小脚本 这样我就不必在磁盘上物理放置的位置实际运行它 该脚本非常简单 就是通过代理提供 apt get 访问权限 我这样做是这样的 bin bash array len array args array
  • JQuery Datepicker 返回 Date 对象类型

    Datepicker返回的对象类型是什么 假设我有以下内容 txtbox datepicker onClose function date something What is date 我有兴趣从另一个日期选择器读取日期对象进行比较 例如
  • Wix 安装、服务器、客户端或两者

    我想创建 Wix 安装程序来安装 Client Server或两者都基于用户选择 我的问题是当用户选择服务器时如何限制安装客户端 它被安装 因为它的级别 1 我已经定制了WixUI Mondo 我尝试使用组件条件但没有成功
  • 任何 iPhone 应用程序使用的内存

    关于iOS内存管理 我有一些不明白的地方 我想知道 iPhone 应用程序在设备上运行时通常需要多少内存 是否有像 10MB 这样的固定数字 如果应用程序包含大量大图像 对内存有何影响 它们仅在加载时影响内存吗 当有多个应用程序运行时 iO
  • WebBrowser 控件报告什么 UserAgent?

    只是想知道 VB NET 在访问网页时读取的浏览器类型是什么 例如 在我的网站上 它显示了访问我的网站的所有不同浏览器的详细信息 您没有为您的问题提供太多背景信息 但我认为您正在谈论用户代理字符串当您使用时发送的WebBrowser con
  • 使用路径变量在 golang 中调用 GET REST API

    我是第一次尝试Golang 我正在尝试调用具有路径变量的 GET REST API 我正在使用 net http 我正在尝试如下所示 但到目前为止还没有运气 我需要知道如何使用路径变量并从代码中传递该变量 任何帮助或代码示例将不胜感激 这似
  • SQL Server - 重叠数据的累积总和 - 获取总和达到给定值的日期

    在我们公司 我们的客户执行我们在不同表中记录的各种活动 面试出勤 课程出勤和其他一般活动 我有一个数据库视图 它将所有这些表中的数据结合在一起 为我们提供了如下所示的 ActivityView 正如您所看到的 一些活动是重叠的 例如 在参加