SQL:是否将更新与分组依据相结合?
我有两张桌子:SQL:是否将更新与分组依据相结合?,sql,group-by,hsqldb,Sql,Group By,Hsqldb,我有两张桌子: 事件: mac | na ---------- abc | (null) abc | (null) def | (null) mac | na | timestamp --------------------- abc | na1 | 1 abc | na2 | 2 abc | na3 | 3 def | na4 | 1 丰富内容: mac | na ---------- abc | (null) abc | (null) def | (null) mac | na |
事件
:
mac | na
----------
abc | (null)
abc | (null)
def | (null)
mac | na | timestamp
---------------------
abc | na1 | 1
abc | na2 | 2
abc | na3 | 3
def | na4 | 1
丰富内容
:
mac | na
----------
abc | (null)
abc | (null)
def | (null)
mac | na | timestamp
---------------------
abc | na1 | 1
abc | na2 | 2
abc | na3 | 3
def | na4 | 1
现在我想用enrichments.na
中的值更新events.na
列,其中mac
匹配,timestamp
是特定mac
的最大时间戳
对于本例,结果将是:
abc | na3
abc | na3
def | na4
最有效的方法是什么
谢谢 这应该适用于使用公共表表达式的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
那将是HyperSQL(HSQLDB)。为什么表事件中有两行相同?@ypercube:因为我没有包含不相同的列。感谢链接到正确的手册。当我在写答案的时候,我没有看到评论澄清数据库系统。“安德里姆:你为什么要回答你的问题?”它可能工作得很好,因为它与您的基本相同,只是我不知道正确的语法(因为我不知道OP使用的是什么产品)。您在搜索正确的手册方面做得很好,因此您的答案应该保留。刚刚注意到您在我的答案的评论末尾添加了“andTOP
”。对不起,我在你给我的手册中找不到这个链接。“先取”和“限制”都有,但“顶部”没有。不过我可能在找。@AndriyM:是的,LIMIT
和FETCH
在很多地方都提到过<代码>顶部
仅在段落中出现一次:。我想知道这是否被允许。