sql - 使用时间戳间隔加入 SQL
问题描述
考虑下表。
Table A
Id Paket Starttime Endtime
8 4714 2019-05-23 13:28:28.000 2019-05-23 13:28:31.000
7 4713 2019-05-23 13:28:10.000 2019-05-23 13:28:28.000
6 4712 2019-05-23 13:27:57.000 2019-05-23 13:28:10.000
5 4711 2019-05-23 13:27:40.000 2019-05-23 13:27:57.000
Table B
Timestamp Bla
2019-05-23 13:28:26.000 A
2019-05-23 13:28:27.000 A
2019-05-23 13:28:28.000 A
2019-05-23 13:28:29.000 B
2019-05-23 13:28:30.000 B
2019-05-23 13:28:31.000 B
2019-05-23 13:28:32.000 B
2019-05-23 13:28:33.000 B
我想得到以下结果。
Result
Timestamp Bla Paket
2019-05-23 13:28:26.000 A 4713
2019-05-23 13:28:27.000 A 4713
2019-05-23 13:28:28.000 A 4714
2019-05-23 13:28:29.000 B 4714
2019-05-23 13:28:30.000 B 4714
需要注意的一些事项:
- 在
Table A
中,一个包的开始时间与其前一个包的结束时间相同。 - 在
Table A
我真的不在乎间隔是否在一侧或另一侧半开。例如,时间2019-05-23 13:28:28.000
可能属于 Paket 4713 或 4714(但不能同时属于两者)。任何一种解释都很好。在Result
中,我写了2019-05-23 13:28:28.000
属于 4714 的那个,但我也写了 4713(然后为 增加了一行2019-05-23 13:28:31.000
)。 - in
Result
的行数可能比 in 少Table B
,因为 的最后几行Table B
可能不属于 的任何开始-结束时间间隔Table A
。
我正在使用 Microsoft SQL Server。
SQL 将如何连接表 A 和 B 以获得所需的结果?欣赏你的任何想法。
解决方案
我想你只是想要join
:
select b.*, a.paket
from b join
a
on b.timestamp >= a.starttime and
b.timestamp < a.endtime;
推荐阅读
- jquery - 使用 AJAX 更新部分页面后,DataTables jquery 插件消失
- css - UI Bootstrap/Bootstrap 3 - 如何使容器居中?
- python - 调用函数时不会创建 Python Tkinter Tic-Tac-Toe 窗口
- flutter - 如何在单击按钮时刷新 ListViewBuilder?
- pandas - pandas 中多个数据帧部分共享索引的操作
- java - 如何为不是 Spring Boot 的 Java 应用程序指定外部配置文件
- python - 如何绘制从列表列表中提取的数据?
- javascript - 以编程方式关闭/退出 PWA
- rust - 神秘的冲突实现
- c++ - 为什么调整向量的大小比reserve 和push_back 快?