Я работаю над написанием запроса MariaDB и сталкиваюсь со следующей ошибкой:
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'GROUP BY 1,2
) x
) z
WHERE user_period != 0
ORDER BY 1,2
-- {"us' at line 42
Вот запрос:
WITH
users AS (
SELECT id,
onboarded_at
FROM users
WHERE onboarded_at <= NOW()
GROUP BY 1
),
events AS (
SELECT receiver_id,
type,
created_at
FROM events
WHERE created_at <= NOW()
)
SELECT *
FROM (
SELECT *,
MAX(CASE WHEN user_period = 0 THEN retained_users ELSE NULL END) OVER (PARTITION BY "Signup Date") AS "New Users",
retained_users/
MAX(CASE WHEN user_period = 0 THEN retained_users ELSE NULL END) OVER (PARTITION BY "Signup Date") AS retention_rate,
(LAG(retained_users) OVER (PARTITION BY "Signup Date" ORDER BY "Signup Date") - retained_users)/
MAX(CASE WHEN user_period = 0 THEN retained_users ELSE NULL END) OVER (PARTITION BY "Signup Date") AS churn_rate,
(LAG(retained_users) OVER (PARTITION BY "Signup Date" ORDER BY "Signup Date") - retained_users)/
LAG(retained_users) OVER (PARTITION BY "Signup Date" ORDER BY "Signup Date") AS churn_rate_from_previous_period
FROM (
SELECT (MONTH,u.onboarded_at) AS "Signup Date",
(EXTRACT(YEAR FROM e.created_at) - EXTRACT(YEAR FROM u.onboarded_at)) * 12 +
(EXTRACT(MONTH FROM e.created_at) - EXTRACT(MONTH FROM u.onboarded_at)) -
CASE WHEN (CEILING(DATE_PART('day',f.created_at) - DATE_PART('day',u.onboarded_at))) < 0 THEN 1 ELSE 0 END AS user_period,
COUNT(DISTINCT f.receiver_id) AS retained_users
FROM users u
JOIN events f
ON e.receiver_id = u.id
WHERE u.onboarded_at >= DATE_TRUNC(MONTH,NOW()) - INTERVAL '25 MONTH'
GROUP BY 1,2
) x
) z
WHERE user_period != 0
ORDER BY 1,2
Ошибка SQL не помогает; что я тут не так делаю?