合并 2 个以时间戳为唯一标识符的数据集(但它们不相同)
Merging 2 datasets with timestamp as unique identifiers (but they are not the same)
我有 2 个历史标签数据。我使用 openquery 来获取 table 中的这些数据。数据是这样的:
TAG1:
timestamp1 string1
标签 2:
timestamp2 string2
我想把这个合二为一table
timestamp1 string1 string2
问题是 Timestamp1 和 Timestamp2 不匹配。我需要在 table 中将 string1 和 string2 放在一起。有什么办法可以解决这个问题吗?时间戳的差异也可能因情况而异。 (可以是 100 毫秒到 5 秒)
示例:
标签 1 table:
10/09/2018 22:05:00 "hello"
10/09/2018 22:10:00 "heyhey"
标签 2 table:
10/09/2018 22:05:28 "azeryy"
10/09/2018 22:10:04 "qwerty"
结果table:
10/09/2018 22:05:00 "hello" "azeryy"
10/09/2018 22:10:00 "heyhey" "qwerty"
如果您可以 post 采样数据,将来会很有帮助。因为你是新来的,所以我把它放在一起给你,这样你就可以看到一个例子。
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
我有 2 个历史标签数据。我使用 openquery 来获取 table 中的这些数据。数据是这样的:
TAG1:
timestamp1 string1
标签 2:
timestamp2 string2
我想把这个合二为一table
timestamp1 string1 string2
问题是 Timestamp1 和 Timestamp2 不匹配。我需要在 table 中将 string1 和 string2 放在一起。有什么办法可以解决这个问题吗?时间戳的差异也可能因情况而异。 (可以是 100 毫秒到 5 秒)
示例:
标签 1 table:
10/09/2018 22:05:00 "hello"
10/09/2018 22:10:00 "heyhey"
标签 2 table:
10/09/2018 22:05:28 "azeryy"
10/09/2018 22:10:04 "qwerty"
结果table:
10/09/2018 22:05:00 "hello" "azeryy"
10/09/2018 22:10:00 "heyhey" "qwerty"
如果您可以 post 采样数据,将来会很有帮助。因为你是新来的,所以我把它放在一起给你,这样你就可以看到一个例子。
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