2013-03-16 42 views
0

我需要生成一些SQL,它會顯示一些交易中的趨勢(上或下)。分析TSQL

如果我從3/15提取數據我有一個上升的趨勢得分12比歷史數據,考慮這個表有PlayerId和分數

PlayerId, Score, Date 
1,10,3/13 
1,11,3/14 
1,12,3/15 

我確實在大約10年前,甲骨文8i中類似的東西使用一些像排名分析功能,但它是10年前....

結果將類似於

PlayerId, Score, Date, Trend 
1,12,3/15,UP 

我怎樣才能做到與SQL Azure類似的東西?

+0

你可以充分利用所有的平均值,並比較最新的,如果最新的是大於平均值,則走勢是嗎?如果不是,那麼你如何界定什麼是「趨勢」? – Matthew 2013-03-16 18:58:55

回答

3

這個SQL:

with data as (
    select * from (values 
    (1,11,cast('2013/03/12' as smalldatetime)), 
    (1,15,cast('2013/03/13' as smalldatetime)), 
    (1,11,cast('2013/03/14' as smalldatetime)), 
    (1,12,cast('2013/03/15' as smalldatetime)) 
) data(PlayerId,Score,[Date]) 
) 
select 
    this.*, 
    Prev = isnull(prev.Score,0), 
    tick = case when this.Score > isnull(prev.Score,0) then 'Up' else 'Down' end 
from data this 
left join data prev 
    on prev.PlayerId = this.PlayerId 
    and prev.[Date]  = this.[Date] - 1 

返回此輸出:

PlayerId Score  Date     Prev  tick 
----------- ----------- ----------------------- ----------- ---- 
1   11   2013-03-12 00:00:00  0   Up 
1   15   2013-03-13 00:00:00  11   Up 
1   11   2013-03-14 00:00:00  15   Down 
1   12   2013-03-15 00:00:00  11   Up 
+0

謝謝。這使我走上了正確的道路。 – jason 2013-03-16 20:16:52