I的值有三個表:SQL查詢來更新一個表中的列的基於條件的兩個不同的表
INDICATOR
---------------------
ID | INDICATOR_NEW
---------------------
001 | 1
002 | 1
003 | 1
DETAILS
------------------------
ID | ADD | POSTDATE
------------------------
001 | ADD1 | 02-AUG-15
001 | ADD2 | 09-AUG-15
002 | ADD1 | 09-AUG-15
002 | ADD2 | 02-AUG-15
HISTORY
--------------------------------
ID | ADD | STARTDATE | VALUE
--------------------------------
001 | ADD1 | 02-AUG-15 | 100
001 | ADD2 | 09-AUG-15 | 10
002 | ADD1 | 09-AUG-15 | 20
002 | ADD2 | 02-AUG-15 | 25
我必須寫一個SQL代碼來更新的INDICATOR
表爲0 INDICATOR_NEW
值基於以下檢查:
ID
INDICATOR
的表中存在表DETAILS
。- 紀錄上述ID存在於
HISTORY
表和該ID
持有HISTORY.MAX(STARTDATE) = DETAILS.POSTDATE - 7
我想用下面的查詢以獲得結果:
UPDATE INDICATOR
SET INDICATOR_NEW = 0
WHERE INDICATOR_NEW = 1
AND EXISTS (SELECT 1
FROM DETAILS D1
WHERE ID = D1.ID)
AND EXISTS(SELECT 1
from (SELECT MAX(STARTDATE) OVER(PARTITION BY ID) RN,ID
from HISTORY H1)T1,
DETAILS D1
WHERE T1.RN = D1.DMDPOSTDATE - 7
AND T1.ID = D1.ID);
這是獲得的正確方法期望的結果還是應該使用GROUP BY
而不是PARTITION BY
(考慮性能效率)?
如果其是T-SQL(決定使用的MySQL/orace/SQLSERVER)標籤,則可以肯定簡化第一部分'更新指示器 SET INDICATOR_NEW = 0 FROM指標I JOIN詳情D1 ON我.ID = D1.ID ...' – lad2025
Thanks.So它會提高代碼的性能。 ?你也可以建議在第二部分? – sqlpractice
如果您使用[SqlFiddle](http://sqlfiddle.com/)準備結構,採樣數據和共享鏈接,它將更容易幫助。 – lad2025