2017-10-19 50 views
2

請幫助SQL查詢。我有一個表:PL/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, 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); 

我需要與NO MAX值TEMPVALUE更新所有記錄(通過模式分組)。因此,我必須用Ids更新記錄(1,3,5)。帶有ID(2,4)的記錄在那裏有PATTERN組中的最大值。

幫助PLZ

+0

什麼值的更新語句你想更新嗎? – L30n1d45

回答

1

這個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 
; 

你應該能夠建立一個圍繞,很容易夠

+0

謝謝你的男人。我再一次看到'OVER(PARTITION BY pattern)'構造。也許你可以告訴我在哪裏可以更好地學習它 - 我無法理解它:( – R1K0

+0

@ R1K0:只需搜索Oracle分析功能 - 那裏有很多好東西 –

+0

和男人 - 那麼'1 = 1'條件怎麼樣 - 或只是在使用可視化SQL後?:) – R1K0

0

事情是這樣的:

update tabletest t 
    set ???? 
    where t.tempval < (select max(tempval) from tabletest tt where tt.pattern = t.pattern); 

目前還不清楚你想要什麼設定值。 ????用於設置值的代碼。

相關問題