2014-03-01 53 views
0

我對sql很陌生,我很難弄清楚如何編寫我的查詢來更新我的一個表。我有一個表stock_price與下列字段:對於表中的每條記錄,使用最小和最大值更新列

stock_symbol, date, open_price, daily_high, daily_low, close_price,volume

該表中填充了每年美國股票的2年(2012年,2013年)每日股價,相當於約190萬條記錄。

我期待添加兩個新字段year_highyear_low。對於2013年的記錄,我需要使用現有數據(過去365天的close_price的最小值和最大值)計算並更新這些新字段。我真的在迷失如何解決這個問題,所以我希望有人能幫助我開始。

回答

0

解決這個使用通用SQL做計算的一種方式:

select p.*, 
     (select min(sp2.close_price) 
     from stock_price sp2 
     where sp2.stock_symbol = sp.stock_symbol and 
       sp2.date between sp.date - 365 and sp.date 
     ) as yearmin, 
     (select max(sp2.close_price) 
     from stock_price sp2 
     where sp2.stock_symbol = sp.stock_symbol and 
       sp2.date between sp.date - 365 and sp.date 
     ) as yearmax 
from stock_price sp; 

數據庫不同的日期計算了一下,所以減法可能是不夠的。

如果你在你的表中的列(或者,如果你添加它們使用alter table),你可以更新他們爲:

update stock_price 
    set year_min = (select min(sp2.close_price) 
        from stock_price sp2 
        where sp2.stock_symbol = stock_price.stock_symbol and 
          sp2.date between stock_price.date - 365 and stock_price.date 
        ), 
     year_max = (select max(sp2.close_price) 
        from stock_price sp2 
        where sp2.stock_symbol = stock_price.stock_symbol and 
          sp2.date between stock_price.date - 365 and stock_price.date 
        ); 

注意,這兩個將投入價值爲先364天,即使全年不可用。

+0

真棒!這很好用!正是我在找的東西。感謝幫助!! – user3368353

0

更新stock_price set year_high =(選擇max(close_price),其中日期介於'start_date'和'end_date'之間),其中日期介於'start_date'和'end_date'之間;設置year_low =(選擇min(close_price)'start_date'和'end_date'之間的日期),其中'start_date'和'end_date'之間的日期;以及其他日期。

還有就是要在做它在表上的冗餘數據這種方式,另一種方法是將有一個單獨的表一年明智的最小值和最大值

相關問題