【问题标题】:How to aggregate its previous 30 days for each line in MySQL without using self-join?如何在不使用自连接的情况下汇总 MySQL 中每一行的前 30 天?
【发布时间】: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 天。

【问题讨论】:

  • '我想避免这种情况'

标签: mysql sql aggregation window-functions analytic-functions


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 2019-05-21
    • 2022-07-01
    • 2018-09-05
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多