>假设我们有一个名为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