【发布时间】:2015-03-03 06:16:47
【问题描述】:
在过去 2 年中,我每天都有一堆值。我需要得到每月 10 天的平均值。与 9 月 1 日至 9 月 10 日、9 月 11 日至 20 日等的平均值一样......
这些值在事实表中,我的目标是从中创建一个聚合事实表。事实表中的字段是 - Location Key、Time Key 和 Value。
time_dim 表有日历日期和time_key。
有什么建议吗?
感谢您的帮助。
阿伦
样本数据
Location_Key----Time_Key----Value
2345------------414---------300
333-------------413---------400
1---------------2346--------566
14--------------1987--------900
2379------------111---------250
346-------------110---------1125
188-------------333---------567
187-------------422---------333
21--------------789---------170
211-------------2-----------900
Time dim 有日历日期,例如 2013.01.01、2013.01.02、2013.01.03..... 等。
我需要得到 10 天的平均值。
附上time_dim中的样本数据
TIME_KEY CAL_DATE DAY_OF_MONTH WEEK_NUMBER MONTH_NUMBER WEEK DEKADE DEKADE_NUMBER MONTH YEAR_MONTH JULIAN YEAR DEKADE_KEY MONTH_DESC
413 2013.01.01 1 1 1 2013W00 2013D01 1 Jan 2013M01 1 2013 2628 2013M01
103 2013.01.02 2 1 1 2013W00 2013D01 1 Jan 2013M01 2 2013 2628 2013M01
683 2013.01.03 3 1 1 2013W00 2013D01 1 Jan 2013M01 3 2013 2628 2013M01
414 2013.01.04 4 1 1 2013W00 2013D01 1 Jan 2013M01 4 2013 2628 2013M01
207 2013.01.05 5 1 1 2013W00 2013D01 1 Jan 2013M01 5 2013 2628 2013M01
684 2013.01.06 6 1 1 2013W00 2013D01 1 Jan 2013M01 6 2013 2628 2013M01
415 2013.01.07 7 2 1 2013W01 2013D01 1 Jan 2013M01 7 2013 2628 2013M01
6 2013.01.08 8 2 1 2013W01 2013D01 1 Jan 2013M01 8 2013 2628 2013M01
685 2013.01.09 9 2 1 2013W01 2013D01 1 Jan 2013M01 9 2013 2628 2013M01
416 2013.01.10 10 2 1 2013W01 2013D01 1 Jan 2013M01 10 2013 2628 2013M01
686 2013.01.11 11 2 1 2013W01 2013D02 2 Jan 2013M01 11 2013 2629 2013M01
208 2013.01.12 12 2 1 2013W01 2013D02 2 Jan 2013M01 12 2013 2629 2013M01
687 2013.01.13 13 2 1 2013W01 2013D02 2 Jan 2013M01 13 2013 2629 2013M01
417 2013.01.14 14 3 1 2013W02 2013D02 2 Jan 2013M01 14 2013 2629 2013M01
104 2013.01.15 15 3 1 2013W02 2013D02 2 Jan 2013M01 15 2013 2629 2013M01
SQL 查询
select min(cal_date), max(cal_date), sum(daily_weather), location_key, dekade_key
from
(select t.*,(row_number() over (order by cal_date) -
row_number() over (partition by daily_weather order by cal_date)
) as grpid
from aggr_fact_testing t
) t
group by grpid, cal_date,location_key,dekade_key
【问题讨论】:
-
一些ddl和样本数据怎么样?我可以考虑 5 或 6 种非常简单的可能性,但这取决于您的数据结构等...sqlfiddle.com 是一个很好的起点
-
既然已经有了时间维度,就不能直接加入事实表,加入10天的范围吗?
-
我尝试将 time_dim 加入事实表,但坚持如何动态计算每个月的 10 天。编辑了示例数据的问题。
-
JamesZ,你是怎么做到的。这正是我正在寻找的。对不起,我对 SQL 不太熟悉。
-
2 月的最后一个范围是 8 天还是 9 天?而对于一月/三月/五月/七月/八月/十月/十二月,最后一个范围是 11 天?
标签: sql sql-server