Day 0 から Day 7 (またはその他の特定の将来の日付) にログインしたユニーク ユーザーの数を調べるときに機能する保持クエリを作成しました。
ただし、問題は、0 日目から 1 日目から 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 上にあります。
サンプル データと目的の結果。
newusers テーブル:
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
したがって、望ましい結果には、最初の日付と、その時点でログインした新規ユーザーの数が含まれます。1 日目から 7 日目までにログインしたユーザー数とともに、7 日先の将来の日付も表示されます。