Объединение в SQL с временными метками - PullRequest
0 голосов
/ 23 мая 2019

Рассмотрим следующие таблицы.

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 Ответ

1 голос
/ 23 мая 2019

Я думаю, вы просто хотите join:

select b.*, a.paket
from b join
     a
     on b.timestamp >= a.starttime and
        b.timestamp < a.endtime;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...