我有包含字段Datatime(DateTime
)和sales(Number
)的sales表。如何编写一个SQL查询来获取过去6个月中按月份和年份分组的数据以及新列“running count”。
Running count是一个正整数,它从1开始(如果销售额为0),如果下个月有销售,则从2开始(假设有销售,上个月的运行计数为1),依此类推。如果一个月没有销售,则该月的运行计数将为0,如果下个月有销售,则从1重新开始,依此类推。
示例:
当前月份年为'09/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 |
欢迎您对本问题的编辑提出建议。
发布于 2017-09-11 17:47:23
这太丑陋了。但它是有效的:
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
https://stackoverflow.com/questions/46155996
复制相似问题