Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:是否将更新与分组依据相结合?_Sql_Group By_Hsqldb - Fatal编程技术网

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使用的是什么产品)。您在搜索正确的手册方面做得很好,因此您的答案应该保留。刚刚注意到您在我的答案的评论末尾添加了“and
TOP
”。对不起,我在你给我的手册中找不到这个链接。“先取”和“限制”都有,但“顶部”没有。不过我可能在找。@AndriyM:是的,
LIMIT
FETCH
在很多地方都提到过<代码>顶部
仅在段落中出现一次:。我想知道这是否被允许。