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

Posted

技术标签:

【中文标题】如何在不使用自连接的情况下汇总 MySQL 中每一行的前 30 天?【英文标题】:How to aggregate its previous 30 days for each line in MySQL without using self-join? 【发布时间】:2018-06-22 13:46:13 【问题描述】:

假设我们有一个名为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-30 期间的聚合第 x 天到 x-1 天。

【问题讨论】:

'我想避免这种情况' 【参考方案1】:

你可以通过..eg来使用一个组:

  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

【讨论】:

以上是关于如何在不使用自连接的情况下汇总 MySQL 中每一行的前 30 天?的主要内容,如果未能解决你的问题,请参考以下文章

NestJS + MySQL:如何在不设置实体的情况下连接多个数据库

使用 Entityframework Core,如何在不更改连接字符串的情况下动态更改我连接的 MySql 数据库?

如何在不使用对话框的情况下为 C# 项目中的 MySQL 数据库设置连接字符串?

如何在不使用 CONCAT 操作的情况下连接两列 RDBMS 字段[重复]

在不使用 PHP 的情况下将 MySql 与 Android 连接

是否可以在不使用 Oracle MCS 中的连接器的情况下创建自定义 API?