我尝试在两种不同的情况下使用SQL实现队列分析。第一个具有以下格式的数据:
UserId, ApplicationDate, LastLogin
在这种情况下,我所做的是
SELECT
DATEPART(MONTH, uw.ApplicationDate) AS Month,
COUNT(*) AS SignUps,
SUM(CASE WHEN uw1.UserId IS NULL THEN 0 ELSE 1 END)*100/COUNT(*) AS "1",
SUM(CASE WHEN uw2.UserId IS NULL THEN 0 ELSE 1 END)*100/COUNT(*) AS "2",
SUM(CASE WHEN uw3.UserId IS NULL THEN 0 ELSE 1 END)*100/COUNT(*) AS "3",
...
FROM #users AS uw
LEFT JOIN #users AS uw1 ON uw.UserId = uw1.UserId AND uw1.LastLogin> DATEADD(MONTH, 1, uw.ApplicationDate)
LEFT JOIN #users AS uw2 ON uw.UserId = uw2.UserId AND uw1.LastLogin> DATEADD(MONTH, 2, uw.ApplicationDate)
LEFT JOIN #users AS uw3 ON uw.UserId = uw3.UserId AND uw1.LastLogin> DATEADD(MONTH, 3, uw.ApplicationDate)
...
GROUP BY DATEPART(month, uw.ApplicationDate)
ORDER BY DATEPART(month, uw.ApplicationDate) ASC
UserId, OrderDate, PreviousExpiryDate, NextExpiryDate
编辑以进行澄清
所以我为什么要努力做到这一点
-
对于第1个月和2018年,获取所有具有活动订阅的用户。这是从上一个月和下一个月(上一个月)检查的<=2018年第1个月和第1年<=下个月。为了简单起见,我不在乎用户是否有半个月的活动订阅,只要至少有一天。
-
-
持续X个月。