Объединение двух наборов данных с меткой времени в качестве уникальных идентификаторов (но они не совпадают) - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть 2 исторических данных тега.Я делаю openquery, чтобы получить эти данные в таблице.Данные примерно такие:

TAG1:

timestamp1 string1

TAG2:

timestamp2 string2

Я хотел бы объединить это в одну таблицу

timestamp1 string1 string2

Проблема в том, что Timestamp1 и Timestamp2 не совпадают.Мне нужно собрать string1 и string2 вместе в таблице.Есть ли возможность решить эту проблему?Кроме того, разница в метках времени может отличаться в зависимости от обстоятельств.(может быть от 100 мс до 5 секунд)

Пример:

Таблица тегов 1:

   10/09/2018 22:05:00          "hello"

   10/09/2018 22:10:00          "heyhey"

Таблица тегов 2:

  10/09/2018 22:05:28          "azeryy"

  10/09/2018 22:10:04          "qwerty"

Таблица результатов:

  10/09/2018 22:05:00          "hello"      "azeryy"

  10/09/2018 22:10:00          "heyhey"     "qwerty"

1 Ответ

0 голосов
/ 10 сентября 2018

В будущем было бы полезно, если вы можете опубликовать образцы данных.Поскольку вы новичок здесь, я собрал это для вас, чтобы вы могли увидеть пример этого.

declare @Tag1 table
(
    SomeDate datetime
    , SomeValue varchar(20)
)

insert @Tag1 values
('10/09/2018 22:05:00', 'hello')
, ('10/09/2018 22:10:00', 'heyhey')

declare @Tag2 table
(
    SomeDate datetime
    , SomeValue varchar(20)
)

insert @Tag2 values
('10/09/2018 22:05:28', 'azeryy')
, ('10/09/2018 22:10:04', 'qwerty')

Теперь мы можем сосредоточиться на задаче, которая очень свободно объединяет это.Row_Number очень полезен для этого.Вы можете прочитать больше о ROW_NUMBER здесь.https://docs.microsoft.com/en-us/sql/t-sql/functions/row-number-transact-sql?view=sql-server-2017

select t1.SomeDate
    , t1.SomeValue
    , t2.SomeValue
from
(
    select *
        , RowNum = ROW_NUMBER() over(order by SomeDate desc)
    from @Tag1
) t1
join
(
    select *
        , RowNum = ROW_NUMBER() over(order by SomeDate desc)
    from @Tag2
) t2 on t2.RowNum = t1.RowNum
order by t1.SomeDate
...