鉴于此查询:
select [Code],
[EffectiveDate],
[Volume] = Sum(Volume),
[VolumeRank] = RANK() OVER (PARTITION BY EffectiveDate ORDER BY SUM(Volume) DESC),
[VolumePercent] = PERCENT_RANK() OVER (PARTITION BY EffectiveDate ORDER BY SUM(Volume) ASC)
from CodeTable
where EffectiveDate between @start and @end
group by DerivativeType, MemberCode, EffectiveDate
产生这些结果
X 2014-05-02 00:00:00.000 15683.00 1 1
X 2014-05-05 00:00:00.000 10524.00 1 1
Y 2014-05-05 00:00:00.000 8318.00 2 0.99236641221374
Y 2014-05-02 00:00:00.000 8264.00 2 0.991935483870968
音量百分比计算排名百分比,这是有意义的!
我想使用类似的功能来返回在日期上划分的总音量的百分比音量,而不是排名百分比。
我没有看到树木的木头......
有什么想法吗?
答案 0 :(得分:1)
然后您想使用窗口函数来计算总音量。我认为逻辑是:
select sum(volume) / sum(sum(volume)) over (partition by EffectiveDate)
如果volume
是整数,则应将其转换为非整数。否则,除法将返回一个整数 - 并且为0或1.我经常通过乘以1.0
来做到这一点:
select sum(volume*1.0) / sum(sum(volume)) over (partition by EffectiveDate)
第一次看到它时,构造sum(sum(volume))
看起来很奇怪。内部sum()
适用于group by
。外部sum()
用于窗口函数 - 获取聚合后的总数。