你如何比较今年和前一年的同日同周?



大多数零售商在他们的销售报告中使用商品日历,可以帮助他们找到今年和去年的同一天,同一周。

例如今天是'2016-10-10' Monday。上一年度;2015年,同一周,星期一为"2015-10-12"。

我们如何通过SQL查询捕获这些数据并将其显示在一个表中?

你有所有的日期函数来做long way:

  • 从日期中计算出周数。
  • 从带有日期部分的日期中计算出天数
  • 用dateadd week添加previous_year-01-01的周数。
  • 用dateadd day添加不同的天数

或者快捷方式,只要减去52周就够了:

DATEADD(week, -52, some_Date)
SELECT t1.data AS data1, t1.date AS date1,
  t2.data AS data2, t2.date AS date2
FROM table t1
LEFT OUTER JOIN table t2 
  ON ( DATEPART(week,t1.date) = DATEPART(week,t2.date)
     AND DATEPART(weekday,t1.date) = DATEPART(weekday,t2.date) )
WHERE DATEPART(year,t1.date) = 2016 
      AND DATEPART(year,t2.date) = 2015

如果查询太慢,可以使用计算列来辅助:

ALTER TABLE table ADD year AS DATEPART(year,date) PERSISTED;
ALTER TABLE table ADD week AS DATEPART(week,date) PERSISTED;
ALTER TABLE table ADD weekday AS DATEPART(weekday,date) PERSISTED;
CREATE INDEX idx_datecalc ON table (year, week, weekday);

现在适应上面的查询:

[...]
LEFT OUTER JOIN table t2 
  ON ( t1.week = t2.week) ...etc.

最新更新