2013-03-16 4 views
0

Мне нужно создать некоторый SQL, который покажет мне тренд (вверх или вниз по тику) в некоторых трансацитонах.Аналитический TSQL

Рассмотрим эту таблицу с PlayerId и Score

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

Если я вытягиваю данные от 3/15 у меня есть счет в 12 с восходящим трендом по сравнению с историческими данными.

я сделал что-то подобное в Oracle 8i около 10 лет назад, используя некоторые из аналитических функций, как ранг, тем не менее это было 10 лет назад ....

Результаты будут похожи на

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

Как я могу сделать что-то подобное с sql azure?

+0

Вы можете взять среднее из всех, и сравнить с последним, если последняя больше, чем в среднем, то тренд вверх? Если нет, то как вы определяете, что такое «тренд»? – Matthew

ответ

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

Смежные вопросы