SQL中不同日期页面视图的指数衰减

SQL中不同日期页面视图的指数衰减,sql,exponential,calculus,Sql,Exponential,Calculus,我有一个不同的日期与数量的产品在一个网页上查看了30天的时间框架。我试图用SQL创建一个指数衰减模型。我之所以使用指数衰减,是因为我想强调最新的事件,而不是老事件。我不知道如何在SQL中编写它而不出错。我从来没有这样做过这种类型的模型,所以想确保我做得正确 ================================= 数据如下所示 product views date a 1 2014-05-15 a 2 2

我有一个不同的日期与数量的产品在一个网页上查看了30天的时间框架。我试图用SQL创建一个指数衰减模型。我之所以使用指数衰减,是因为我想强调最新的事件,而不是老事件。我不知道如何在SQL中编写它而不出错。我从来没有这样做过这种类型的模型,所以想确保我做得正确

================================= 数据如下所示

product     views   date

  a            1     2014-05-15
  a            2     2014-05-01
  b            2     2014-05-10
  c            4     2014-05-02
  c            1     2014-05-12
  d            3     2014-05-11
product      views      date          rownum
--------------------------------------------------
  a            1     2014-05-15         1
  a            2     2014-05-14         2
  a            2     2014-05-13         3
  b            2     2014-05-10         1
  b            3     2014-05-09         2
  b            2     2014-05-08         3
  b            1     2014-05-07         4
================================

代码:

不确定要编写什么来执行该模型

我想惩罚那些被浏览的老产品,而不是最近浏览的产品


感谢您的帮助

您可以这样做:

  • 选择要应用指数衰减的分区,然后在这样的组中按日期降序

  • 使用具有递增顺序的函数ROW_NUMBER()获取每个子组内的行编号

  • 计算pow(在[0,1],rownum中的变量),并将其应用到结果中

  • 代码可能如下所示(可能在Oracle SQL或db2中工作):

    内部select语句(iii)创建一个临时表,该表可能如下所示

    product     views   date
    
      a            1     2014-05-15
      a            2     2014-05-01
      b            2     2014-05-10
      c            4     2014-05-02
      c            1     2014-05-12
      d            3     2014-05-11
    
    product      views      date          rownum
    --------------------------------------------------
      a            1     2014-05-15         1
      a            2     2014-05-14         2
      a            2     2014-05-13         3
      b            2     2014-05-10         1
      b            3     2014-05-09         2
      b            2     2014-05-08         3
      b            1     2014-05-07         4
    
    然后,下一个查询(ii)使用行数构造指数衰减因子0.9^(rownum-1)并将其应用于视图。结果是

    product     adjusted_views     date          rownum
    --------------------------------------------------
      a            1 * 0.9^0     2014-05-15         1
      a            2 * 0.9^1     2014-05-14         2
      a            2 * 0.9^2     2014-05-13         3
      b            2 * 0.9^0     2014-05-10         1
      b            3 * 0.9^1     2014-05-09         2
      b            2 * 0.9^2     2014-05-08         3
      b            1 * 0.9^3     2014-05-07         4
    
    在最后一步(外部查询)中,将汇总调整后的视图,因为这似乎是您感兴趣的数量


    但是,请注意,为了保持一致,日期之间应该有规则的距离,例如,总是在一天(--这里不是一天,那里不是一个月,因为它们将以类似的方式进行加权,尽管它们不应该如此)。

    您是否知道
    按顺序
    ?我对任何一行都感到困惑。这也意味着什么?它意味着你想要应用指数衰减因子的任何东西。在您的情况下,可能是视图。我编辑了答案,希望能解决你的问题。
    product     adjusted_views     date          rownum
    --------------------------------------------------
      a            1 * 0.9^0     2014-05-15         1
      a            2 * 0.9^1     2014-05-14         2
      a            2 * 0.9^2     2014-05-13         3
      b            2 * 0.9^0     2014-05-10         1
      b            3 * 0.9^1     2014-05-09         2
      b            2 * 0.9^2     2014-05-08         3
      b            1 * 0.9^3     2014-05-07         4