如何在不使用自连接的情况下汇总 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 字段[重复]