Sta*_*Csh 0 t-sql sql-server sql-server-2008 sql-server-2008-r2
我需要一个sql服务器结果集"打破"列值,但如果我在排名函数中按此列排序,我真正需要的顺序就会丢失.最好用例子来解释.我目前正在尝试的查询是:
select RANK() over(partition by Symbol, Period order by TradeDate desc)
SymbSmaOverUnderGroup, Symbol, TradeDate, Period, Value, Low, LowMinusVal,
LMVSign
from #smasAndLow3
Run Code Online (Sandbox Code Playgroud)
它返回:
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
Run Code Online (Sandbox Code Playgroud)
我需要的排名是:1,1,1,2,2,3,3.因此我需要按Symbol,Period进行分区,我需要在LMVSign上启动一个新分区(它只包含值U,O和E),但是我必须通过TradeDate desc进行排序.除非我弄错了,LMVSign的分区或排序将无法对日期列进行排序.我希望这是有道理的.我在疯狂地工作,没有光标,但我不能让它工作..提前感谢.
澄清后更新:我认为你正在进入岛屿和差距的世界.如果您的要求是按行,按时间顺序对行进行分组,并按照TradeDate的顺序对LMVSign进行排序,当这些列中的任何一列发生变化时对它们进行排序,您可以使用它(通过Itzik Ben-Gan对岛屿和间隙的解决方案).
; with islandsAndGaps as
(
select *,
-- Create groups. Important part is order by
-- The difference remains the same as two sequences
-- run along, but the number itself is not ordered
row_number() over (partition by Symbol, Period
order by TradeDate)
- row_number() over (partition by Symbol, Period
order by LMVSign, TradeDate) grp
from Table1
),
grouped as
(
select *,
-- So to order it we use last date in group
-- (mind partition by uses changed order by from second row_number
-- and unordered group number
max(TradeDate) over(partition by LMVSign, grp) DateGroup
from islandsAndGaps
)
-- now we can get rank
select dense_rank() over (order by DateGroup desc) Rnk,
*
from grouped
order by TradeDate desc
Run Code Online (Sandbox Code Playgroud)
老答案:
通过重新启动排名进行分区.我认为您需要订购:
dense_rank() over (order by Symbol, Period, LMVSign desc) Rnk
Run Code Online (Sandbox Code Playgroud)
然后你应该按顺序使用TradeDate:
order by Rnk, TradeDate desc
Run Code Online (Sandbox Code Playgroud)
如果您需要它作为数字,请添加另一列:
row_number() over (order by Symbol, Period, LMVSign desc, TradeDate desc) rn
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
179 次 |
| 最近记录: |