gpt4 book ai didi

SQL:统计过去一周有事件的用户

转载 作者:行者123 更新时间:2023-12-04 20:35:11 25 4
gpt4 key购买 nike

我正在尝试计算在所有日期的 30 天内或 7 天内至少进行过两次 session 的用户数量。

我的数据如下:

Date        UserID  SessionID 
1/1/2013 Bob1234 1
2/1/2013 Bob1234 2
2/2/2013 Bob1234 3
2/3/2013 Cal5678 4

这将导致下表(仅显示选择日期)
Date    CountActiveUsers
1/1/2013 1
1/15/2013 0
2/2/2013 1
2/3/2013 2

真实数据集具有连续数据范围内所有日期的值,结果表应为每个日期都有一个条目。

SessionID 是唯一的,而 UserID 总是指同一个人。

到目前为止,我有两个查询可以做一些接近的事情。第一个返回用户过去一周的 session 数:
SELECT Count(
d.[SessionID]
) As SessionPastWeek
,m.[UserID]
,m.[Date]
FROM [Cosmos].[dbo].[Sessions_tbl] as m
Inner Join [Cosmos].[dbo].[Sessions_tbl] as d
on m.[UserID2] = d.[UserID] AND
--Between does not work here for some reason
d.[Date] <= m.[Date] AND
d.[Date] > DATEADD(d,-7,m.[date])

Group By m.[UserID]
,m.[Date]

另一个来自以下链接,该链接计算给定日期的活跃用户数
Active Users SQL query

我在 SQL Server 2012

我无法将两者结合起来。

编辑澄清:我需要的查询可能不会有任何 getdate() 或类似的,因为我需要知道有多少用户符合 1 月 1 日、今天以及所有日期之间的“事件”标准。

谢谢你的帮助!

最佳答案

我认为您只需要添加一个 HAVING 子句:

HAVING COUNT(d.[SessionID]) >= 2

在 10 in 30 查询中,只需将 DATEADD() 更改为 30 天,并将 HAVING 子句更改为 >= 10。
    SELECT COUNT(d.[SessionID]) AS SessionPastPeriod
, m.[UserID]
, m.[Date]
FROM Sessions_tbl AS m
INNER JOIN Sessions_tbl as d
ON m.UserID = d.UserID
AND d.[Date] <= m.[Date]
AND d.[Date] > DATEADD(d,-7,m.[Date])
GROUP BY m.UserID
, m.[Date]
HAVING COUNT(d.[SessionID]) >= 2

我希望这有帮助。

关于SQL:统计过去一周有事件的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16708295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com