我有一组 8 个月左右的数据,部分是 2012 年的数据,部分是 2013 年的数据。我不确定这是否是一种文化问题,但我是荷兰人,我相信数据库中的数据应该按照这个标准来解释。
所以我写了两个查询,一个使用常规周表达式,一个使用 ISO_week,这个查询看起来像这样:
SELECT datepart(ISO_WEEK,date_dtm) as date_detail,
datepart(yyyy,date_dtm) as date_year,
(sum(sum_value)/sum(user_count)) as value
FROM kpi_record
WHERE kpi_series_id = '15'
AND date_dtm > dateadd(ww,-12,'2013-02-28 00:00:00.000')
group by datepart(ISO_WEEK,date_dtm), datepart(yyyy,date_dtm)
ORDER BY datepart(yyyy,date_dtm), datepart(ISO_WEEK,date_dtm)
--
SELECT datepart(ww,date_dtm) as ww,
datepart(yyyy,date_dtm) as date_year,
(sum(sum_value)/sum(user_count)) as value
FROM kpi_record
WHERE kpi_series_id = '15'
AND date_dtm > dateadd(ww,-12,'2013-02-28 00:00:00.000')
group by datepart(yyyy,date_dtm), datepart(ww,date_dtm)
ORDER BY datepart(yyyy,date_dtm), datepart(ww,date_dtm)
这两个查询的结果分别是:
1 2012 7,14
49 2012 7,31475409836066
50 2012 7,39261285909713
51 2012 7,47905477980666
52 2012 7,30618401206636
1 2013 7,49925705794948
2 2013 7,26598837209302
3 2013 7,24533333333333
4 2013 7,22245989304813
5 2013 6,96774193548387
6 2013 7,24523160762943
7 2013 7,14718019257221
8 2013 7,34691195795007
9 2013 7,23430962343096
和
49 2012 7,4537037037037
50 2012 7,33109017496635
51 2012 7,4656652360515
52 2012 7,36874051593323
53 2012 7,13888888888889
1 2013 7,50515463917526
2 2013 7,33190271816881
3 2013 7,17693315858453
4 2013 7,24209378407852
5 2013 7,0201072386059
6 2013 7,19281914893617
7 2013 7,17278911564626
8 2013 7,3283378746594
9 2013 7,24733096085409
我的问题,按这个顺序,是:
- 在第二个查询中(使用常规 ww),本周 53 保存了哪些数据?据我了解,这是进入 2013 年的几天,但仍属于第 52 周,但由于这一年即将结束,因此为那些日子增加了一周。这个对吗?如果没有,请赐教。
- 在第一个查询 (iso_week) 中,第 1 周是几?我相信这是第二个查询(常规 ww)中看到的第 53 周。但它应该是 2013 年的第一周,或者可能添加到 2013 年的第一周?我很难理解这里发生了什么。
- 即使解释了这一点,我也不太明白为什么要返回 14 行数据。通过我的查询,我想从我提供的日期开始返回 12 周(例如硬编码)。我怎么可能每周获得 12 行合法数据,而不是 13 或 14 行?如果我使用天而不是星期,它会追溯到 12 天,因此我有 12 行返回给我。
谢谢你的帮助,我希望我是有道理的。