【发布时间】:2019-03-12 18:19:13
【问题描述】:
我正在尝试从包含跨季度和季度内重复的表中按季度滚动客户计数。我想只计算在季度内累积的客户的第一次出现。 下面的代码给了我错误的答案 - 它只计算每个季度的不同客户,而不是累积。
DROP TABLE IF EXISTS #FACT;
CREATE TABLE #FACT("FYQ" VARCHAR(10), "GUN" varchar(5));
INSERT INTO #FACT
VALUES
('FY2015Q1', 'A'),
('FY2015Q1', 'B'),
('FY2015Q1', 'B'),
('FY2015Q2', 'C'),
('FY2015Q2', 'D'),
('FY2015Q2', 'E'),
('FY2015Q2', 'E'),
('FY2015Q2', 'A'),
('FY2015Q3', 'F'),
('FY2015Q3', 'G'),
('FY2015Q3', 'C');
SELECT * FROM #FACT;
WITH CTE
AS
(SELECT FYQ, COUNT(DISTINCT GUN) AS CNT
FROM #FACT
GROUP BY FYQ
)
SELECT FYQ,
SUM(CNT) OVER (PARTITION BY FYQ ORDER BY FYQ ROWS UNBOUNDED PRECEDING) AS RollingCustCount
FROM CTE;
数据中四分之三的正确答案是 2、5、7。 谢谢!
【问题讨论】:
-
“正确答案将是 2,5,7”是什么意思? Q1 包含 2new,Q2 包含 2+3new,Q3 包含 2+3+2new 客户?
-
正确 - Q1 = A 和 B - 2 个客户。 Q2 = A、B、C、D、E - 5 个客户。 Q3 = A、B、C、D、E、F、G - 7 个客户。
标签: sql sql-server