sql-server - 按另一个表上的 DATETIME 范围分组
问题描述
我有一个有 2 列 startdatetime 和 stopdatetime 的表。
STARTDATETIME | STOPDATETIME | ID
2019-05-05T05:00:00Z 2019-05-05T06:00:00Z 1
2019-05-05T07:00:00Z 2019-05-05T08:00:00Z 1
2019-05-05T05:00:00Z 2019-05-05T06:00:00Z 2
2019-05-05T07:00:00Z 2019-05-05T08:00:00Z 2
2019-05-05T08:00:00Z 2019-05-05T10:00:00Z 2
第二个表有一个包含 eventdatetime 的列。
EVENTDATETIME | ID | Event
2019-05-05T05:30:00Z 1 1
2019-05-05T05:45:00Z 1 1
2019-05-05T07:30:00Z 1 1
2019-05-05T07:30:00Z 2 1
2019-05-05T07:40:00Z 2 1
2019-05-05T07:50:00Z 2 1
我正在尝试在第一个表中进行选择并加入第二个表,其中 eventdatetime 位于行之间并获取事件总和。我不知道如何完成的是通过考虑其他参数的位置来创建一个动态组。
预期输出:
STARTDATETIME | STOPDATETIME | ID | SUM(EVENT)
2019-05-05T05:00:00Z 2019-05-05T06:00:00Z 1 2
2019-05-05T07:00:00Z 2019-05-05T08:00:00Z 1 1
2019-05-05T05:00:00Z 2019-05-05T06:00:00Z 2 0
2019-05-05T07:00:00Z 2019-05-05T08:00:00Z 2 3
2019-05-05T08:00:00Z 2019-05-05T10:00:00Z 2 0
解决方案
SELECT
r.ID
,r.STARTDATETIME
,r.STOPDATETIME
,Sum(e.EVENT) as [SUM(Event)]
FROM dbo.GroupDatetimeRanges as r
Left Join dbo.GroupDatetimeEvents as e
on r.ID = e.ID and e.EVENTDATETIME between r.STARTDATETIME and r.STOPDATETIME
Group By
r.ID
,r.STARTDATETIME
,r.STOPDATETIME
结果
ID STARTDATETIME STOPDATETIME SUM(Event)
1 2019-05-05T05:00:00Z 2019-05-05T06:00:00Z 2
1 2019-05-05T07:00:00Z 2019-05-05T08:00:00Z 1
2 2019-05-05T05:00:00Z 2019-05-05T06:00:00Z NULL
2 2019-05-05T07:00:00Z 2019-05-05T08:00:00Z 3
2 2019-05-05T08:00:00Z 2019-05-05T10:00:00Z NULL
推荐阅读
- wix - WiX 不检测 VC++ 可再发行组件
- laravel - 将文件上传到 apache 服务器上的虚拟机
- angular - Angular-routing:html-template 中的路由链接无法与路由模块中定义的路由匹配
- r - ggplot中的非矩形图例
- git - 从推送的提交中删除文件而不从树 git 中删除它
- python - 气流:如何将变量 obtenida de mi DB 传递给 SimpleHttpOperator 函数
- oracle - TOAD:无法从包中调试程序
- firebase - 设备上的 ML Kit Face Detection 是否可供商业公司免费使用?
- vue.js - 预期对象,得到数组 laravel vue 分页
- kotlin - 如何获取 API 28 的光标