在我自我加入以获得保留率时,我能采取哪些措施来防止性能下降?我想使用子查询,但不知道该怎么做。
SELECT
CAST(AA.timestamp AS DATE) AS Date,
COUNT(DISTINCT AA.userid) AS ActiveUser,
COUNT(DISTINCT Future.userid) AS RetainedUser,
COUNT(DISTINCT Future.userid)/COUNT(DISTINCT AA.userid) :: float
AS RetentionRate
FROM AA
LEFT JOIN AA AS Future
ON AA.userid= Future.userid
AND CAST(AA.timestamp AS DATE)= CAST(Future.timestamp AS DATE)-INTERVAL'3 Day'
GROUP BY 1;
我刚刚找到了答案。
SELECT
Active.Date,
COUNT(DISTINCT Active.userid) AS ActiveUser,
COUNT(DISTINCT Future.userid) AS RetainedUser,
COUNT(DISTINCT Future.userid)/COUNT(DISTINCT Active.userid) :: float AS RetentionRate
FROM (SELECT
CAST(AA.timestamp AS DATE) AS Date,
userid
FROM AA
GROUP BY CAST(AA.timestamp AS DATE), userid) AS Active
LEFT JOIN
(SELECT
CAST(AA.timestamp AS DATE) AS Date,
userid
FROM AA
GROUP BY CAST(AA.timestamp AS DATE), userid) AS Future
ON Active.userid= Future.userid
AND Active.Date= Future.Date-INTERVAL'3 Day'
GROUP BY 1;