Advertisement
festinko

Untitled

Sep 27th, 2022
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 1.28 KB | None | 0 0
  1. WITH
  2.     preparedData as (
  3.         SELECT
  4.             userID,
  5.       productID,
  6.             paymentAmount,
  7.             paymentPeriod,
  8.             paymentDateTime,
  9.             DATE_TRUNC(DATETIME(paymentDateTime), MONTH) as prepaidPeriodStart,
  10.       DATE_TRUNC(DATE_ADD(DATETIME(paymentDateTime), INTERVAL paymentPeriod MONTH), MONTH) as prepaidPeriodEnd
  11.         FROM
  12.             `uptimerobot-001.ur.payments`
  13.         WHERE
  14.             paymentStatus = 1
  15.             AND paymentPeriod BETWEEN 1 AND 12
  16.             AND userID IS NOT NULL
  17.     ),
  18.     calendar as (
  19.         select
  20.             DATE_TRUNC(DATETIME(paymentDateTime), MONTH) as reportingYearMonth
  21.         FROM `uptimerobot-001.ur.payments`
  22.         GROUP BY reportingYearMonth
  23.     ),
  24.    
  25. customersYearMonthPaymentPeriod as (
  26.  
  27. SELECT
  28.  cal.reportingYearMonth,
  29.  paymentPeriod,
  30.  count(DISTINCT userID) activeCustomers
  31. FROM calendar cal
  32. JOIN preparedData pd ON cal.reportingYearMonth BETWEEN pd.prepaidPeriodStart AND prepaidPeriodEnd
  33. GROUP BY
  34.     cal.reportingYearMonth,
  35.   paymentPeriod
  36.  
  37. ORDER BY
  38.   reportingYearMonth DESC,
  39.   paymentPeriod)
  40.  
  41. SELECT
  42.  
  43.   reportingYearMonth,
  44.   SUM(CASE WHEN paymentPeriod = 1 THEN activeCustomers END) as monthlyCustomers,
  45.   SUM(CASE WHEN paymentPeriod = 12 THEN activeCustomers END) as annualCustomers
  46.  
  47. FROM
  48.   customersYearMonthPaymentPeriod
  49.  
  50. GROUP BY
  51.   reportingYearMonth
  52.  
  53. ORDER BY
  54.   reportingYearMonth DESC
  55.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement