代码之家  ›  专栏  ›  技术社区  ›  Tasos

sqlserver中的SQL队列分析

  •  0
  • Tasos  · 技术社区  · 7 年前

    我尝试在两种不同的情况下使用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个月。
    0 回复  |  直到 7 年前