如何在不使用自连接的情况下聚合 MySQL 中每行的前 30 天?



>假设我们有一个名为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 天内不同用户的数量。最好的方法是什么?

一个明显的解决方案是使用自联接,但我们希望我们可以避免这种情况。
它与窗口功能有关吗?我想知道是否有一个功能,对于每一行,我们可以在前面的 x 行和之后的 y 行内聚合。

例如,类似的问题,如"到目前为止记录的每一天提前 30 天的窗口内的橙色价格平均值是多少"等。更具体地说,这就像在第 x 天询问 x-30 到 x-1 天的聚合。

你可以用一个组由..例如:

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

相关内容

  • 没有找到相关文章

最新更新