我创建了一个保留查询,该查询在尝试找出从第 0 天开始在第 7 天(或任何其他特定的未来日期)登录的唯一用户数时有效。
但是,问题是现在我想查看从第 0 天到第 7 天(或任何其他未来日期范围)有多少用户登录。
这是当前运行的查询,但没有产生任何结果:
select FirstTime, count(distinct(newusers)) as NewUsers, FutureDate
, count(distinct(retaineduser)) as RetainedUser
from
(
select nu.UserID as newusers, firsttime, l.UserID as retaineduser, l.LoginDate as FutureDate
from ##newusers nu
left join ##logins l on nu.UserID = l.UserID
and FirstTime between dateadd(dd, -1, l.logindate) and dateadd(dd, -7, l.logindate)
group by nu.UserID, FirstTime, l.UserID, l.logindate
) as x
group by FirstTime, futuredate
HAVING count(retaineduser) > 0
我似乎无法理解为什么这不起作用。在 JOINS 上使用 BETWEEN 条件是否被认为是不好的做法?这是在 SQL Server 上。
样本数据和期望的结果。
新用户表:
NewUser - FirstTime
A - 2/1/2019
B - 2/1/2019
C - 2/1/2019
D - 2/2/2019
登录表:
RetainedUser - LoginDate
A - 2/1/2019
A - 2/3/2019
A - 2/4/2019
B - 2/1/2019
B - 2/6/2019
C - 2/1/2019
C - 2/10/2019
D - 2/2/2019
D - 2/3/2019
期望的结果:
FirstTime - NewUsers - FutureDate - RetainedUser
2/1/2019 - 3 - 2/8/2019 - 2
2/2/2019 - 1 - 2/9/2019 - 1
因此,期望的结果将具有当时登录的新用户的第一个日期和数量。连同未来 7 天的未来日期以及在第 1 天和第 7 天之间登录的用户数量。