使用时间戳记间隔加入SQL

时间:2019-05-23 15:54:01

标签: sql sql-server tsql

请考虑以下表格。

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以获得期望的结果? 感谢您的任何想法。

1 个答案:

答案 0 :(得分:1)

我认为您只想要join

select b.*, a.paket
from b join
     a
     on b.timestamp >= a.starttime and
        b.timestamp < a.endtime;