コンテストの制限時間が終了しました。
以降も提出を行うことができますが、順位集計には反映されません。
以降も提出を行うことができますが、順位集計には反映されません。
ソースコード
-- 「年月が最も古いレコードの年月」から「年月が最も新しいレコードの年月」の一覧を作成
WITH TMP_MONTH AS (
SELECT
MIN(MONTHLY) AS START_DATE
, MAX(MONTHLY) AS END_DATE
FROM
MRR_DATA
UNION ALL
SELECT
DATE(START_DATE, '+1 months')
, END_DATE
FROM
TMP_MONTH
WHERE
START_DATE <= END_DATE
)
, MONTHS_TO_NEXT_MONTH AS (
SELECT
START_DATE AS YM
FROM
TMP_MONTH
)
-- 各月の「前月のNEW_MRR + 前月のEXPANSION_MRR - 前月のDOWNGRADE_MRR - 前月のCHURN_MRR」を計算
-- 起算初日はデータが存在しないため、必ずLAG_CALCはnull。
-- MONTHS_TO_NEXT_MONTHを元テーブルにしているため、MRR_DATAでデータがない月もLAG_CALCはnull。
, LAG_CALC AS (
SELECT
MONTH.YM
, LAG(NEW_MRR, 1) OVER()
+ LAG(EXPANSION_MRR, 1) OVER()
- LAG(DOWNGRADE_MRR, 1) OVER()
- LAG(CHURN_MRR, 1) OVER()
AS LAG_CALC
FROM
MONTHS_TO_NEXT_MONTH AS MONTH
OUTER LEFT JOIN
MRR_DATA ON MONTH.YM = MRR_DATA.MONTHLY
)
SELECT
YM
-- null(データなし)の場合は0とする
, CASE WHEN LAG_CALC IS NULL
THEN
0
ELSE
SUM(LAG_CALC) OVER(
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
)
END
AS MRR
FROM
LAG_CALC
;
提出情報
提出日時 | 2024/01/29 14:29:27 |
コンテスト | 第5回 SQLコンテスト |
問題 | MRRの集計 |
受験者 | maori |
状態 (詳細) | AC (Accepted: 正答) |
メモリ使用量 | 84 MB |
メッセージ
テストケース(通過数/総数)
3/3
状態
メモリ使用量
データパターン1
AC
84 MB
データパターン2
AC
84 MB
データパターン3
AC
84 MB