sql-server - 如何从多个时间范围中进行选择
问题描述
假设我在 SQLServer 中有一个名为 Events 的表。它包含一些带有时间戳的事件。
ID TimeStamp EventDescription
1 '2019-04-04 08:20' Machine Error 1
2 '2019-04-04 09:01' Machine Error 2
3 '2019-04-05 09:23' Machine Error 3
4 '2019-04-05 12:23' Machine Error 4
5 '2019-04-06 11:33' Machine Error 5
6 '2019-04-06 18:07' Machine Error 6
7 '2019-04-07 12:23' Machine Error 7
此外,我还有第二个名为 Ranges 的表。它包含时间范围。
ID From To
1 '2019-04-04 08:00' '2019-04-04 09:00'
2 '2019-04-05 10:30' '2019-04-05 16:00'
3 '2019-04-06 10:00' '2019-04-06 12:00'
我需要从表事件中选择事件,其中时间戳在表范围的时间范围之间。
结果:
ID TimeStamp EventDescription
1 '2019-04-04 08:20' Machine Error 1
4 '2019-04-05 12:23' Machine Error 4
5 '2019-04-06 11:33' Machine Error 5
我不知道该怎么做。我必须使用动态 SQL 来构建此查询吗?
解决方案
我将您的数据创建为临时表:
SELECT 1 ID, CAST('2019-04-04 08:20' AS DATETIME) TimeStamp, 'Machine Error 1' EventDescription
INTO #Events
UNION
SELECT 2 ID, CAST('2019-04-04 09:01' AS DATETIME) TimeStamp, 'Machine Error 2' EventDescription
UNION
SELECT 3 ID, CAST('2019-04-05 09:23' AS DATETIME) TimeStamp, 'Machine Error 2' EventDescription
UNION
SELECT 4 ID, CAST('2019-04-05 12:23' AS DATETIME) TimeStamp, 'Machine Error 2' EventDescription
UNION
SELECT 5 ID, CAST('2019-04-06 11:33' AS DATETIME) TimeStamp, 'Machine Error 2' EventDescription
UNION
SELECT 6 ID, CAST('2019-04-06 18:07' AS DATETIME) TimeStamp, 'Machine Error 2' EventDescription
UNION
SELECT 7 ID, CAST('2019-04-07 12:34' AS DATETIME) TimeStamp, 'Machine Error 2' EventDescription
SELECT 1 ID, CAST('2019-04-04 08:00' AS DATETIME) [From], CAST('2019-04-04 09:00' AS DATETIME) [To]
INTO #Ranges
UNION
SELECT 2 ID, CAST('2019-04-05 10:30' AS DATETIME) [From], CAST('2019-04-05 16:00' AS DATETIME) [To]
UNION
SELECT 3 ID, CAST('2019-04-06 10:00' AS DATETIME) [From], CAST('2019-04-06 12:00' AS DATETIME) [To]
然后就像将它们连接在一起一样简单:
SELECT E.*
FROM #Ranges R
JOIN #Events E ON E.TimeStamp BETWEEN R.[From] AND R.[To]
推荐阅读
- java - 检测矩阵中的相邻元素(SameGame)
- tensorflow - 在 Tensorflow 2.0 上使用给定模型获取梯度时遇到问题
- powershell - powershell 检查布尔环境变量
- javascript - dayjs 在日和小时中的两个日期之间的差异
- java - 如何从 onBindViewHolder 中获取 spinner 的值
- java - 应用程序的 onPause、onBackPressed 和 onResume 上的 MediaPlayer 行为
- bigcartel - 从下拉移动导航菜单中删除页面 Big Cartel
- c# - 如何同步 WPF 中的多个切换按钮?
- sql - 如何定义来自不同来源的具有不同标识符的两个表之间的关系
- typescript - 如何在 TypeScript 中迭代具有类型安全性的映射类型的属性?