我的销售表包含字段Datatime(DateTime
)和sales(Number
)。
如何编写SQL查询以使用新列“运行计数”获取过去6个月按月分组的数据。
运行计数是一个正整数,以1开始(如果销售额为0),如果下个月有销售,则为2(假设销售和运行计数在上个月为1),依此类推。如果一个月没有销售,则该月的销售数量将为0,如果下个月有销售,则重新开始为1,依此类推。
例:
本月份是' 2017年' 3月,4月,6月,7月,8月有销售,但5月没有销售(没有行)。
所以输出将是:
| Month_Year | Sum(Sales) | Running_Count |
| 03/2017 | 1000 | 1 |
| 04/2017 | 1500 | 2 |
| 05/2017 | 0 | 0 |
| 06/2017 | 300 | 1 |
| 07/2017 | 550 | 2 |
| 08/2017 | 1900 | 3 |
欢迎建议编辑此问题。
答案 0 :(得分:1)
这很难看......但它确实有效:
WITH
aset
AS
(SELECT month_year
, sales
, CASE WHEN COALESCE (LAG (sales) OVER (ORDER BY month_year), 0) = 0 THEN 1 ELSE 0 END COUNT
FROM deleteme_table),
bset
AS
(SELECT month_year, sales, SUM (COUNT) OVER (ORDER BY month_year) count_group
FROM aset)
SELECT month_year
, sales
, CASE
WHEN sales = 0
THEN
0
ELSE
ROW_NUMBER ()
OVER (
PARTITION BY count_group ORDER BY month_year
)
END
running_count
FROM bset;
SALES MONTH_YEAR RUNNING_COUNT
1000 2017/03/01 1
1500 2017/04/01 2
0 2017/05/01 0
300 2017/06/01 1
550 2017/07/01 2
1900 2017/08/01 3