Analytical TSQL
本文关键字:TSQL Analytical | 更新日期: 2023-09-27 18:04:30
我需要生成一些SQL来显示一些事务中的趋势(上升或下降)。
考虑这个带有PlayerId和Score的表
PlayerId, Score, Date
1,10,3/13
1,11,3/14
1,12,3/15
如果我从3/15提取数据,我的得分为12,与历史数据相比呈上升趋势。
大约10年前,我在Oracle 8i中做了类似的事情,使用了一些分析函数,如排名,但这是10年前....
结果与
类似PlayerId, Score, Date, Trend
1,12,3/15,UP
我怎么能做一些类似的sql azure?
这个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