如何在不使用self-join的情况下为mysql中的每一行聚合它的前30天?

ohtdti5x  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(365)

假设我们有一个名为 UserSessions . 每个用户可以在一天内或跨不同的日子有多个会话。此表的列是

UserSessions table: 
---------------------
SessionID (int) PK, 
UserID (int), 
datetime (datetime)

示例数据如下所示:

1, 1001, 2017-01-01  
2, 1001, 2017-01-01  
3, 1002, 2017-01-01   
4, 1002, 2017-01-02  
...

现在,我们要编写一个查询,显示过去30天内每天的不同用户数。最好的方法是什么?
一个明显的解决方案是使用self-join,但我们希望可以避免这种情况。
这和窗口功能有关吗?我想知道是否有一个特性,对于每一行,我们可以在前面的x行和后面的y行内进行聚合。
例如,类似的问题,如“迄今为止记录的每天前30天的窗口中,橙子价格的平均值是多少”等。更具体地说,这就像是在第x天的x-30到x-1天内问一个聚合问题。

5fjcxozz

5fjcxozz1#

你可以用一个小组,例如:

select UserId, count(*)
  from my_table 
  where datetime between date_sub(now(), interval 30 day ) 
                        AND date_sub(now(), interval 1 day )
  group by UserID

相关问题