SQL 从另一个具有聚合函数的 table 变量插入到 table 变量?

SQL to insert into table variable from another table with aggregate function?

我的来源 table 是一个 table 有数千条记录。主键是列 [data_serial_num].

SELECT TOP 1000
    [data_serial_num]
   ,[foreign_serial_num]
   ,[msg_id]
   ,[data_value]
   ,[timestamp]
   ,[a]
   ,[b]
FROM [external_data]

我想我会创建一个 table 变量来保存由 [foreign_serial_num] 和 [msg_id] 组成的唯一复合键,它还包含 [data_value] 和来自 [timestamp] 的最近时间。

declare @filtered_data table
(
    foreign_serial_num bigint not null
    ,msg_id bigint not null
    ,data_value bigint
    ,timestamp datetimeoffset(7)
    PRIMARY KEY(vehicle_serial_num, msg_id)
)

所以要插入 table 变量,我想我会做这样的事情:

insert into @filtered_data 
  select foreign_serial_num, msg_id, data_value, max(timestamp) 'timestamp'
  from external_data
  group by foreign_serial_num, msg_id

该插入显然不起作用,因为 [data_value] 必须在 group by 子句中,但 return 不是唯一记录。

下面是 的作用,但我不知道如何将 [data_value] 列和数据获取到 table 变量中。

declare filtered_data table
(
    foreign_serial_num bigint not null
    ,msg_id bigint not null
    ,timestamp datetimeoffset(7)
    PRIMARY KEY(vehicle_serial_num, msg_id)
)

insert into filtered_data 
  select foreign_serial_num, msg_id, max(timestamp) 'timestamp'
  from external_data
  group by foreign_serial_num, msg_id

select * from filtered_data 

示例预期输出:

foreign_serial_num | msg_id | data_value | timestamp 
20  | 1 | 0  | 2015-01-14 16:02:47.0000000 -08:00
20  | 2 | 45 | 2015-01-14 16:02:47.0000000 -08:00
20  | 3 | 10 | 2014-11-10 15:41:36.0000000 -08:00
155 | 1 | 0  | 2015-02-27 10:43:09.0000000 -08:00
155 | 2 | 33 | 2015-02-27 10:43:09.0000000 -08:00
155 | 3 | 0  | 2015-02-27 10:43:09.0000000 -08:00

所以我的问题是,什么是从 [external_data] table 获取 [data_value] 到我的 table 变量同时保持复合主键 [foreign_serial_num] 和 [msg_id] 以及来自 [timestamp]?

的最新时间
select * from 
(
select foreign_serial_num, msg_id, data_value, timestamp 
     , row_number() over (partition by oreign_serial_num, msg_id order by timestamp desc) as rn 
  from external_data
) ordered 
where ordered.rn = 1