2013-03-16 2 views
0

일부 트랜잭션에서 트렌드 (위 또는 아래 틱)를 표시하는 SQL을 생성해야합니다. I는 I는 과거 데이터에 비해 상승 추세 12의 점수가 3/15로 데이터를 당기면 Analytical TSQL

는 PlayerId이 테이블 스코어

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

을 고려한다.

나는, 그러나 그것은

결과는

PlayerId, Score, Date, Trend 
1,12,3/15,UP 
에 비슷하게 .... 십년 전, 순위 등의 분석 기능의 일부를 사용하여 약 10 년 전 오라클 8i를 비슷한 일을했다

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