【发布时间】:2016-01-03 00:34:49
【问题描述】:
我正在尝试实现一个简单的数据仓库分析查询,处理“YEAR_VALUE”、“MONTH_VALUE”和“INVOICE_COST”
SELECT YEAR_VALUE, MONTH_VALUE, SUM (INVOICE_VALUE) AS TOTAL_INVOICE,
RANK () OVER (PARTITION BY GROUPING_ID (YEAR_VALUE, MONTH_VALUE) ORDER BY SUM (INVOICE_VALUE) DESC) AS YEAR_RANK,
RANK () OVER (PARTITION BY YEAR_VALUE, GROUPING_ID (MONTH_VALUE) ORDER BY SUM (INVOICE_VALUE) DESC) AS MONTH_RANK
FROM FACT_WH
JOIN TIME_WH ON TIME_WH.TIME_ID = FACT_WH.TIME_ID
GROUP BY (YEAR_VALUE, MONTH_VALUE);
输出是: Output
“YEAR_RANK”应表示与其他年份相比的年度总发票价值,2016 年的 YEAR_RANK=1,2015 年的 YEAR_RANK=2
问题是 'YEAR_RANK' 的值是 1,2,3,4,5 它应该是 1,1,2,2,1 我在我的代码中找不到问题,它可能在第 2 行,我尝试了所有方法并且已经浪费了很多时间。
提前致谢。
【问题讨论】:
-
要回答这类问题,提供表结构的描述、提供一些示例输入数据以及所需的输出总是非常有用的。如果您能提供SQLFiddle,那就更好了。
-
我认为您的 grouping_id 年份排名应该只包含 YEAR_VALUE 而不是 YEAR_VALUE 和 MONTH_VALUE
标签: sql oracle rank window-functions