festinko

Untitled

Dec 21st, 2022
1,029
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 1.78 KB | None | 0 0
  1. WITH
  2.     preparedData as (
  3.         SELECT
  4.             p.userID,
  5.       p.productID,
  6.       pr.productValue,
  7.             paymentAmount,
  8.             paymentPeriod,
  9.             paymentDateTime,
  10.             DATE_TRUNC(DATETIME(paymentDateTime), MONTH) as prepaidPeriodStart,
  11.       DATE_TRUNC(DATE_ADD(DATETIME(paymentDateTime), INTERVAL paymentPeriod MONTH), MONTH) as prepaidPeriodEnd,
  12.       DATE_TRUNC(DATE_ADD(DATETIME(paymentDateTime), INTERVAL paymentPeriod MONTH), DAY) as prepaidPeriodEndDay,
  13.             DATE_ADD(DATETIME(paymentDateTime), INTERVAL paymentPeriod MONTH) as prepaidPeriodEndDateTime
  14.         FROM
  15.             `uptimerobot-001.ur.payments` p
  16.  
  17.     LEFT JOIN
  18.     `uptimerobot-001.ur.products` pr
  19.      
  20.       ON p.productID = pr.productID
  21.  
  22.         LEFT JOIN   (
  23.             SELECT
  24.                 userID,
  25.                 MAX(paymentDateTime) lastPaymentDateTime
  26.             FROM
  27.                 `uptimerobot-001.ur.payments`
  28.            
  29.             WHERE
  30.                 paymentStatus = 1
  31.                 AND paymentPeriod IN (1,12)
  32.                 AND userID IS NOT NULL
  33.             GROUP BY
  34.                 userID
  35.             ) lp
  36.             ON p.userID =lp.userID AND p.paymentDateTime = lp.lastPaymentDateTime
  37.  
  38.         WHERE
  39.             paymentStatus = 1
  40.             AND paymentPeriod IN (1,12)
  41.             AND p.userID IS NOT NULL
  42.             AND lp.lastPaymentDateTime IS NOT NULL
  43.     ),
  44.     calendar as (
  45.         SELECT
  46.         DATE_TRUNC(DATETIME(paymentDateTime), DAY) as reportingYearMonthDay
  47.         FROM `uptimerobot-001.ur.payments`
  48.         GROUP BY
  49.             reportingYearMonthDay
  50.     )
  51.  
  52.   SELECT
  53.         FORMAT_DATETIME('%Y-%V', reportingYearMonthDay) as reportingYearMonthWeek,
  54.         COUNT(DISTINCT userID) churnedCustomers
  55.  
  56.   FROM
  57.     preparedData pd
  58.    
  59.     LEFT JOIN calendar cal
  60.         ON pd.prepaidPeriodEndDateTime > reportingYearMonthDay AND pd.prepaidPeriodEndDay < DATE_ADD(cal.reportingYearMonthDay, INTERVAL 1 DAY)
  61.    
  62.     WHERE
  63.     reportingYearMonthDay IS NOT NULL
  64.  
  65.     GROUP BY
  66.         reportingYearMonthWeek
  67.    
  68.     ORDER BY
  69.         reportingYearMonthWeek DESC
  70.  
  71.    
Advertisement
Add Comment
Please, Sign In to add comment