PL/SQL更新除最大值以外的所有记录
请帮助进行SQL查询。我有一张桌子:PL/SQL更新除最大值以外的所有记录,sql,plsql,oracle11g,Sql,Plsql,Oracle11g,请帮助进行SQL查询。我有一张桌子: CREATE TABLE PCDEVUSER.tabletest ( id INT PRIMARY KEY NOT NULL, name VARCHAR2(64), pattern INT DEFAULT 1 NOT NULL, tempval INT ); 让我们假设它充满了价值: INSERT INTO TABLETEST (ID, NAME, PATTERN, TEMPVAL) VALUES (1, 'A', 1, 1
CREATE TABLE PCDEVUSER.tabletest
(
id INT PRIMARY KEY NOT NULL,
name VARCHAR2(64),
pattern INT DEFAULT 1 NOT NULL,
tempval INT
);
让我们假设它充满了价值:
INSERT INTO TABLETEST (ID, NAME, PATTERN, TEMPVAL) VALUES (1, 'A', 1, 10);
INSERT INTO TABLETEST (ID, NAME, PATTERN, TEMPVAL) VALUES (2, 'A', 1, 20);
INSERT INTO TABLETEST (ID, NAME, PATTERN, TEMPVAL) VALUES (3, 'A', 2, 10);
INSERT INTO TABLETEST (ID, NAME, PATTERN, TEMPVAL) VALUES (5, 'A', 2, 20);
INSERT INTO TABLETEST (ID, NAME, PATTERN, TEMPVAL) VALUES (4, 'A', 2, 30);
我需要更新所有按模式分组的记录,没有最大值TEMPVALUE。因此,我必须更新ID为1、3、5的记录。ID为2、4的记录在模式组中具有最大值
帮助PLZ类似以下内容:
update tabletest t
set ????
where t.tempval < (select max(tempval) from tabletest tt where tt.pattern = t.pattern);
不清楚要设置什么值。这个用于设置值的代码。此select语句将帮助您获得所需的ID:
SELECT
*
FROM
(SELECT
id
,name
,pattern
,tempval
,MAX(tempval) OVER (PARTITION BY pattern) max_tempval
FROM
tabletest
)
WHERE 1=1
AND tempval != max_tempval
;
你应该能够很容易地围绕这一点构建更新语句你想用什么值来更新它们?谢谢你,伙计。再一次,我看到了“按模式过度划分”的构造。也许你可以告诉我在哪里更好地学习它-我不明白:@R1K0:只要搜索Oracle分析函数-那里有很多好东西。还有人-关于“1=1”条件呢-或者在使用visual SQL之后呢这只是习惯——我总是把这种情况放在眼里。这是因为我经常想注释where子句中的行。如果第一行在哪里。。。是有意义的,那么如果您想注释掉它,您需要将WHERE语句下移到下一行。如果第一行是1=1,我知道我永远不想评论那行。好主意。开始使用它: