SQL:将更新与分组相结合?

时间:2012-04-17 08:35:01

标签: sql group-by hsqldb

我有两张桌子:

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是该特定值的最大timestamp mac

对于此示例,结果将是:

abc | na3
abc | na3
def | na4

最有效的方法是什么?

谢谢!

2 个答案:

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

答案 1 :(得分: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
    )