【发布时间】:2018-04-26 15:28:31
【问题描述】:
我有一张股票表,我想为每只股票创建滚动排名。
这是我的数据集示例:
StockID QuoteID QuoteDay QuoteClose
47 230 2018-04-06 5.1200
47 231 2018-04-07 5.2100
47 232 2018-04-08 5.3000
47 233 2018-04-09 5.2100
47 234 2018-04-10 5.1900
47 235 2018-04-11 5.5200
47 236 2018-04-12 7.1600
47 237 2018-04-13 6.6900
47 238 2018-04-14 6.6300
47 239 2018-04-15 7.0200
47 240 2018-04-16 6.6300
47 241 2018-04-17 6.5800
251 100 2018-04-06 0.1906
251 101 2018-04-07 0.1969
251 102 2018-04-08 0.1986
251 103 2018-04-09 0.2291
251 104 2018-04-10 0.1963
251 105 2018-04-11 0.1995
251 106 2018-04-12 0.2271
251 107 2018-04-13 0.3722
251 108 2018-04-14 0.3073
251 109 2018-04-15 0.3292
251 110 2018-04-16 0.2905
251 111 2018-04-17 0.2784
每天,我都想对过去 6 天的 QuoteClose 进行排名。
例如:
StockID QuoteID QuoteDay QuoteClose 7d Rank
47 230 04/06/18 5.1200
47 231 04/07/18 5.2100
47 232 04/08/18 5.3000
47 233 04/09/18 5.2100
47 234 04/10/18 5.1900
47 235 04/11/18 5.5200
47 236 04/12/18 7.1600 1
47 237 04/13/18 6.6900 2
47 238 04/14/18 6.6300 3
47 239 04/15/18 7.0200 2
47 240 04/16/18 6.6300 4
47 241 04/17/18 6.5800 6
251 100 04/06/18 0.1906
251 101 04/07/18 0.1969
251 102 04/08/18 0.1986
251 103 04/09/18 0.2291
251 104 04/10/18 0.1963
251 105 04/11/18 0.1995
251 106 04/12/18 0.2271 2
251 107 04/13/18 0.3722 1
251 108 04/14/18 0.3073 2
251 109 04/15/18 0.3292 2
251 110 04/16/18 0.2905 4
251 111 04/17/18 0.2784 5
注意前6天没有排名。
我在将排名与行号结合起来时遇到问题,所以我的方法是有一个循环,每次只为每只股票输入 7 天的数据。
例如,对于股票 #47,在 2018 年 4 月 12 日,我比较 4/6/8-4/12/8 的 Quoteclose 以确定排名为 1。
然后我将该排名保存到另一个表中。
然后循环将窗口向前移动 1 天,并找到 2018 年 4 月 13 日的排名,这将是 2。对该股票重复该过程,然后对表中的所有其他股票重复该过程。
我的计划很复杂,但应该可以完成工作。
是否有更好、更简洁的方法来实现所有股票的滚动排名?
我试图让这个过程成为一个动态的过程,这样我就可以生成不同的排名周期:7 天、20 天等。
【问题讨论】:
标签: sql-server sql-server-2012 ranking