0

私は2つのテーブルを持っています:

events

mac | na
----------
abc | (null)
abc | (null)
def | (null)

enrichments

mac | na  | timestamp
---------------------
abc | na1 | 1
abc | na2 | 2
abc | na3 | 3
def | na4 | 1

events.naここで、の値で列を更新したいと思います。enrichments.naここで、はmac一致し、その特定timestampのの最大値です。timestampmac

この例の場合、結果は次のようになります。

abc | na3
abc | na3
def | na4

これを行うための最も効率的な方法は何でしょうか?

ありがとう!

4

2 に答える 2

1

これは、共通のテーブル式を使用して SQL Server で動作するはずです

create table events (mac nvarchar(3), na nvarchar(3))
insert into events values ('abc',null);
insert into events values ('abc',null);
insert into events values ('def',null);

create table enrichments (mac nvarchar(3), na nvarchar(3), timestamp int)
insert into enrichments values ('abc','na1',1)
insert into enrichments values ('abc','na2',2)
insert into enrichments values ('abc','na3',3)
insert into enrichments values ('def','na4',1)

with latestEnrichment (mac, latestTimestamp) as
    (select mac, MAX(timestamp)
    from    enrichments
    group by mac)
update  events
set     na = en.na
from    events e join enrichments en on e.mac = en.mac
        join latestEnrichment le on en.timestamp = le.latesttimestamp and
        en.mac = le.mac
于 2012-04-17T08:45:01.597 に答える
1
UPDATE events AS e
SET na = 
    ( SELECT n.na
      FROM enrichments AS n
      WHERE n.mac = e.mac
      ORDER BY n.timestamp DESC
      FETCH FIRST 1 ROWS ONLY
    ) 
于 2012-04-17T09:16:52.163 に答える