SQL Server LAG() 函数计算行之间的差异

3 sql sql-server datediff lag date-difference

我是 SQL Server 的新手,我对 lag() 函数有一些疑问。我必须计算两个用户活动之间的平均距离(以天为单位)。然后,我必须对所有用户进行 GROUP BY,计算每个用户行之间的所有日期差异,最后选择该组的平均值。

为了清楚起见,我有这样的表格: 原表


首先,我必须过滤活动天数(活动!=0)。然后我必须创建这个:

计算行之间的差异

最后,预期的结果是这样的:

我想要的是

我认为这可能是一种“某种”代码:

select userid, avg(diff)
  (SELECT *,DATEDIFF(day, Lag(dateid, 1) OVER(ORDER BY [Userid]), 
   dateid) as diff
   FROM table1
   where activities!=0
   group by userid) t
group by userid
Run Code Online (Sandbox Code Playgroud)

当然是行不通的。我想我还必须做一个 while 循环,因为每个用户的 rownumber 都会发生变化。

我希望你能帮助我!非常感谢您

Vam*_*ala 6

你快到了。只需添加,partition by userid以便为每个用户 ID 和 计算差异order by dateid

select userid, avg(diff)
  (SELECT t.*
         ,DATEDIFF(day, Lag(dateid, 1) OVER(PARTITION BY [Userid] ORDER BY [dateid]),dateid) as diff
   FROM table1 t
   where wager!=0
  ) t
group by userid
Run Code Online (Sandbox Code Playgroud)