2014-09-23 74 views
0

給定一系列閉市價格,如果最後一個給定價格可能不會在最後一次下跌月或周。這是一個示例數據集。使用SQL獲取特定時期結束時的股票價格

SYMBOL PRICE DATE 
MSFT 30 8/23/2014 
MSFT 31 8/27/2014 
MSFT 32 8/31/2014 
MSFT 29 9/4/2014 
MSFT 32 9/8/2014 
MSFT 28 9/12/2014 
MSFT 27 9/16/2014 
MSFT 31 9/20/2014 
MSFT 32 9/24/2014 
MSFT 27 9/28/2014 
MSFT 32 10/2/2014 
MSFT 33 10/6/2014 
MSFT 28 10/10/2014 
MSFT 32 10/14/2014 
GOOG 130 8/23/2014 
GOOG 131 8/27/2014 
GOOG 132 8/31/2014 
GOOG 129 9/4/2014 
GOOG 132 9/8/2014 
GOOG 128 9/12/2014 
GOOG 127 9/16/2014 
GOOG 131 9/20/2014 
GOOG 132 9/24/2014 
GOOG 127 9/28/2014 
GOOG 132 10/2/2014 
GOOG 133 10/6/2014 
GOOG 128 10/10/2014 
GOOG 132 10/14/2014 
AAPL 530 8/23/2014 
AAPL 531 8/27/2014 
AAPL 532 8/31/2014 
AAPL 529 9/4/2014 
AAPL 532 9/8/2014 
AAPL 528 9/12/2014 
AAPL 527 9/16/2014 
AAPL 531 9/20/2014 
AAPL 532 9/24/2014 
AAPL 527 9/28/2014 
AAPL 532 10/2/2014 
AAPL 533 10/6/2014 
AAPL 528 10/10/2014 
AAPL 532 10/14/2014 
+0

而且你會希望看到基於這個樣本數據的結果呢? – 2014-09-23 03:49:57

+0

看看['DAYPART'](http://msdn.microsoft.com/zh-cn/library/ms174420.aspx)函數。 – 2014-09-23 03:53:27

回答

0

使用row_number()將幫助您通過符號或符號和月份或符號和星期到達「最近」(或「最新」);通過這些:

select 
* 
from (
     select 
      * 
      , row_number() over(partition by symbol order by [Date] DESC) as rn 
     from closings 
    ) as L 
where rn = 1 
order by symbol 
; 

select 
* 
from (
     select 
      * 
      , row_number() over(partition by symbol, year([date]), month([date]) order by [Date] DESC) as rn 
     from closings 
    ) as L 
where rn = 1 
order by symbol, [Date] 
; 

select 
* 
from (
     select 
      * 
      , row_number() over(partition by symbol, year([date]), datepart(week,[date]) order by [Date] DESC) as rn 
     from closings 
    ) as L 
where rn = 1 
order by symbol, [Date] 
; 

See this SQLFiddle demo

+0

謝謝。我會試試這個 – 2014-10-27 14:03:49

+0

@ ian-benoliel你試過這些了嗎? – 2014-10-31 02:09:34