我的目的是想這么做的
UPDATE NBA a1 SET jj1=(... and sj2 BETWEEN date'2007-0-01' AND date'2007-03-31' ) where sj2 BETWEEN date'2007-0-01' AND date'2007-03-31';
commit;
上面執行完了,然后接著
UPDATE NBA a1 SET jj1=(... and sj2 BETWEEN date'2007-4-01' AND date'2007-06-30' ) where sj2 BETWEEN date'2007-4-01' AND date'2007-06-30'';
commit;
然后接著
UPDATE NBA a1 SET jj1=(... and sj2 BETWEEN date'2007-7-01' AND date'2007-09-30' ) where sj2 BETWEEN date'2007-7-01' AND date'2007-09-30';
commit;
然后接著
UPDATE NBA a1 SET jj1=(... and sj2 BETWEEN date'2007-10-01' AND date'2007-12-31' ) where sj2 BETWEEN date'2007-10-01' AND date'2007-12-31';
commit;
sj2欄位是系統date函式
然后接下來每年2008、2009,一直到2020年,都這樣依次執行下去
不知道我的資料庫問題在哪,一個季度幾十萬條的資料更新都要半個小時多,十幾年的資料一點點手動的更新太繁瑣。
所以想到用for。。。loop之類陳述句,但由于初學,百度了幾天都搞不定,于是想到請論壇里的老師或大咖們幫忙寫下,節省點時間。
類似于declare
i INTEGER:=0;
for i in 2007..2020 loop
UPDATE NBA a1 SET jj1=(.......................... and sj2 BETWEEN date'i-07-1' AND date'i-12-31' ) where sj2 BETWEEN date'i-07-01' AND date'i-12-31';
commit;
end loop;
類似于上面這樣的陳述句,可以一個月一個月的按順序將2007-2020年都更新完,也可以按一個季度接一個季度,甚至一年接一年也都可以
不知道哪位老師和大咖,有空可以出手幫忙弄下,非常感謝!
uj5u.com熱心網友回復:
不知道你賦值里的邏輯是什么,可以考慮用臨時表試試
DECLARE @I INT
DECLARE @BEGIN_PERYEAR DATE
DECLARE @END_PERYEAR DATE
SET @I=0
SET @BEGIN_PERYEAR='2007-01-01'
SET @END_PERYEAR='2007-12-31'
WHILE @I<=13
BEGIN
UPDATE NBA
SET jj1=(... and sj2 BETWEEN DATEADD(YEAR,@I,@BEGIN_PERYEAR) AND DATEADD(YEAR,@I,@END_PERYEAR))
where sj2 BETWEEN DATEADD(YEAR,@I,@BEGIN_PERYEAR) AND DATEADD(YEAR,@I,@END_PERYEAR)
SET @I=@I+1
END
uj5u.com熱心網友回復:
如果是子查詢,就是速度慢,要看邏輯,一個陳述句半個多小時,肯定有問題, 請提供完整語法, 主要看是幾個表連接,欄位上是否有索引uj5u.com熱心網友回復:
謝謝老師!我的更新陳述句是
UPDATE nba a1 SET var51=(select vi from ( select /*+ no_merge(a2) use_hash(a2) */ dh,sj2,sum(jg) over(order by dh,sj rows between var50 PRECEDING and current row) as vi from mytest.nba where sj2 BETWEEN date'2018-01-1' AND date'2018-12-31' ) a2 where a1.dh=a2.dh and a1.sj2=a2.sj2 and sj2 BETWEEN date'2018-01-01' AND date'2018-12-31');
一年大概有80多萬條資料,更新時間大概要70多分鐘,半年需要50分鐘多,一個季度20多分鐘
假如兩年160多萬條資料開始,要五六個小時,時間越長速度越慢,到最后就奇慢無比,所以我只好想辦法把時間拆分,最多一年一年的更新
有人說是我的資料庫有瓶頸在那,不知道是不是有這個瓶頸,也不知道怎么找瓶頸
麻煩老師指點下,謝謝!


轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/252345.html
標籤:應用實例
上一篇:用什么辦法看資料最方便?
下一篇:求助SOS
