Skip to content

Instantly share code, notes, and snippets.

@Atrix1987
Created February 9, 2017 13:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Atrix1987/bad6d86df0be511765fce9469bd5da23 to your computer and use it in GitHub Desktop.
Save Atrix1987/bad6d86df0be511765fce9469bd5da23 to your computer and use it in GitHub Desktop.
Monthly Accounting Query across years.
SELECT
integer(mnthid/100) YEAR,
integer(mnthid%100) MONTH,
NewUsers,
Recurring,
Resurrected,
NewUsers+Recurring+Resurrected TOTAL FROM (
SELECT
mnthid,
NewUsers,
Recurring,
Resurrected,
NewUsers+Recurring+Resurrected TOTAL
FROM (
SELECT
mnthid,
SUM(IF(DIFF IS NULL, uc, 0)) NewUsers,
SUM(IF(DIFF = 1 or DIFF = 89, uc, 0)) Recurring,
SUM(IF(DIFF > 1 and DIFF != 89, uc, 0)) Resurrected
FROM (
SELECT
mnthid,
DIFF,
EXACT_COUNT_DISTINCT(amplitude_id) uc
FROM (
SELECT
amplitude_id,
mnthid,
mnthid-prevWeek AS DIFF
FROM (
SELECT
amplitude_id,
mnthid,
LAG(mnthid,1) OVER (PARTITION BY amplitude_id ORDER BY mnthid ) AS prevWeek
FROM (
SELECT
amplitude_id,
YR*100+weeks mnthid from(
SELECT
amplitude_id,
YEAR(server_upload_time) YR,
MONTH(server_upload_time) AS WEEKS
FROM (
SELECT
amplitude_id,
server_upload_time
FROM
[project_name:dataset_name.table_name] )
GROUP BY
1,
2,
3 ))))
GROUP BY
mnthid,
DIFF )
GROUP BY
1 ))
ORDER BY
1, 2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment