【问题标题】:Add the values of score column for a specific user considering time decay factor考虑时间衰减因子,为特定用户添加分数列的值
【发布时间】:2018-05-04 10:53:08
【问题描述】:

我在以下链接中提出了一个问题,其中一位成员帮助我解决了大部分问题(计算列 t 和列 pre_score)。但我需要再计算一列。我在以下链接中解释了详细信息。

Previous question

总之,如何使用 t 列和 pre_score 列计算智力资本列?智力资本列考虑所有以前比赛的预分,然后将每个预分乘以 e^(从该比赛过去的天数/500)。在这个例子中,对于每个用户,我们最多有 2 场之前的比赛,但在我的数据集中,它可能甚至超过 200 场比赛,因此我需要有一个查询来考虑比赛的所有分数和每场比赛的时间。 --> e 的值约为 2.71828

competitionId	UserId   	t	pre_score	intelectual-capital
1           	    100			
2	            100	       -4	 3000	3000* POWER (e, -4/500)
3           	    100        -5	 4000	3000*POWER(e,-9/500) + 4000*POWER(e, -5/500)
1           	    200			
4	            200	       -19	 3000	3000*POWER(e,-19/500)
1           	    300			
3	            300	       -9	 3000	3000*POWER(e,-9/500)
4	            300       -10	 1200	3000*POWER(e,-19/500)+ 1200*POWER(e,-10/500) 
1	            400			
2           	    400	       -4	3000	 3000* POWER(e, -4/500)
3           	    400	       -5	4000	3000* POWER(e, -9/500) + 4000*POWER(e,-5/500)

【问题讨论】:

  • 请解释POWER(e 的含义。 e 是什么?
  • @Used_By_Already e 是一个数学常数,大约等于 2.71828。例如 Power(e,2) = 2.71828*2.71828 = 7.39
  • 我对 SQL Server 有非常基本的了解,您给我的帮助非常有用,我不知道该如何感谢您。抱歉,如果我有太多问题打扰您,但我需要找到正确的列才能在我的分析中使用它。
  • 那个问题(“什么是 e?”)在前面的问题中丢失了。有了这个缺失值,再加上公式中的一个小调整,我相信它现在正在产生预期值。
  • @Used_By_Already 你是对的。我写了太多的cmets,重要的答案在cmets中间丢失了。对不起

标签: select group-by sum sql-server-2016 row-number


【解决方案1】:

这个结果:

| prev_score | intellectual_capital | competitionsId | UserId |                 date | score | day_diff |      t | prev_score |
|------------|----------------------|----------------|--------|----------------------|-------|----------|--------|------------|
|     (null) |               (null) |              1 |    100 | 2015-01-01T00:00:00Z |  3000 |       -4 | (null) |     (null) |
|       3000 |              2976.09 |              2 |    100 | 2015-01-05T00:00:00Z |  4000 |       -5 |     -4 |       3000 |
|       4000 |              6936.29 |              3 |    100 | 2015-01-10T00:00:00Z |  1200 |   (null) |     -5 |       4000 |
|     (null) |               (null) |              1 |    200 | 2015-01-01T00:00:00Z |  3000 |      -19 | (null) |     (null) |
|       3000 |              2888.13 |              4 |    200 | 2015-01-20T00:00:00Z |  1000 |   (null) |    -19 |       3000 |
|     (null) |               (null) |              1 |    300 | 2015-01-01T00:00:00Z |  3000 |       -9 | (null) |     (null) |
|       3000 |              2946.48 |              3 |    300 | 2015-01-10T00:00:00Z |  1200 |      -10 |     -9 |       3000 |
|       1200 |              4122.72 |              4 |    300 | 2015-01-20T00:00:00Z |  1000 |   (null) |    -10 |       1200 |
|     (null) |               (null) |              1 |    400 | 2015-01-01T00:00:00Z |  3000 |       -4 | (null) |     (null) |
|       3000 |              2976.09 |              2 |    400 | 2015-01-05T00:00:00Z |  4000 |       -5 |     -4 |       3000 |
|       4000 |              6936.29 |              3 |    400 | 2015-01-10T00:00:00Z |  1200 |   (null) |     -5 |       4000 |

由此查询产生,现在包含e

with Primo as (
      select
              *
            , datediff(day,lead([date],1) over(partition by userid order by [date]),[date]) day_diff
      from Table1
      )
, Secondo as (
      select
              *
           , lag(day_diff,1) over(partition by userid order by [date]) t
           , lag(score,1) over(partition by userid order by [date]) prev_score
      from primo
      )
 select
        prev_score
      , sum(prev_score*power(2.71828,t/500.0)) over(partition by userid order by [date]) intellectual_capital
      , competitionsId,UserId,date,score,day_diff,t,prev_score
from secondo

Demo

【讨论】:

  • 是的。这是我所期待的结果。我希望它适用于所有数据集。我感谢您的帮助。我再次为造成混乱和解释不好而道歉。谢谢你:)
  • 这个公式是可扩展的,所以“它应该”可以工作,但是如果你在 sqlfiddle 扩展样本数据的大小和复杂性,你可以做一些测试。但是 sqlfiddle 确实将左侧文本框的总大小限制为 8000 个字符。
  • 我会在我的数据集上进行测试,如果我有问题会告诉你。感谢您如此慷慨地解决用户的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 2020-10-18
  • 2015-01-15
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
相关资源
最近更新 更多