请考虑以下表格。
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
添加了另一行)。Result
中,行可能少于Table B
,因为Table B
的最后几行可能不属于Table A
中的任何开始-结束时间间隔。 我正在使用Microsoft SQL Server。
SQL如何看起来像联接表A和B以获得期望的结果? 感谢您的任何想法。
答案 0 :(得分:1)
我认为您只想要join
:
select b.*, a.paket
from b join
a
on b.timestamp >= a.starttime and
b.timestamp < a.endtime;