合并带有时间戳作为唯一标识符的2个数据集(但它们不相同)

时间:2018-09-10 19:58:57

标签: sql sql-server tsql historian

我有2个历史标签数据。我进行openquery以获取表中的这些数据。数据是这样的:

TAG1:

timestamp1 string1

TAG2:

timestamp2 string2

我想将其组合成一张桌子

timestamp1 string1 string2

问题是Timestamp1和Timestamp2不匹配。我需要在表中同时获取string1和string2。是否有解决此问题的选项?时间戳的差异也可能因情况而异。 (可能是100毫秒到5秒)

示例:

Tag1表:

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

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

Tag2表:

  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 :(得分:0)

将来,如果您可以发布示例数据,将会很有帮助。由于您是这里的新手,因此我为您整理了这些内容,以便您查看其中的示例。

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