我需要一个sql server结果集来“破解”列值,但如果我在排列函数中按此列排序,我真正需要的顺序就会丢失。这个例子最好解释一下。我目前正在尝试的查询是:我是否需要为我需要的结果集使用可怕的sql服务器循环/游标?
select RANK() over(partition by Symbol, Period order by TradeDate desc)
SymbSmaOverUnderGroup, Symbol, TradeDate, Period, Value, Low, LowMinusVal,
LMVSign
from #smasAndLow3
,并返回:
Rnk Symbol TradeDate Period Value Low LowMinusVal LMVSign
1 A 9/6/12 5 37.09 36.71 -.38 U
2 A 9/5/12 5 37.03 36.62 -.41 U
3 A 9/4/12 5 37.07 36.71 -.36 U
4 A 8/31/12 5 37.15 37.30 .15 O
5 A 8/30/12 5 37.22 37.40 .18 O
6 A 8/29/12 5 37.00 36.00 -1.00 U
7 A 8/28/12 5 37.10 37.00 -.10 U
我需要这里的排名是:1,1,1,2,2,3,3
。所以我需要通过Symbol,Period进行分区,并且我需要在LMVSign(它只包含值U,O和E)上启动一个新分区,但是必须由TradeDate desc命令。除非我弄错了,否则LMVSign的分区或排序会使日期列无法排序。我希望这是有道理的。我正在疯狂地做这个没有光标,但我无法得到它的工作..先谢谢了。
Thx,但将所有具有相同值的LMVSigns组合在一起......表中只有三个唯一值。我在我的原始文章中添加了一些更多的例子。当LMVSigns更改(甚至已经遇到的值)时,我希望RANK()增加。 – StatsViaCsh
@StatsViaCsh我已经更新了我的答案。 –
@NikolaMarkovinović:+1好的答案 –