我们有orders
个数据,我们需要使用Weekly - Custom date Range of 7 Days
生成SQL
报告。该报告将每周显示count
个订单。用户将选择End Date
,我们需要根据该日期创建12个DateRange单位。例如,用户选择1/24/2013
我们需要12点/单位:
Point12 = End Date - 7 Days
Point11 = End Date - 14 Days
Point10 = End Date - 21 Days
Point9 = End Date - 28 Days
.
.
Point1 = End Date - X Days
我们的解决方案:
我们计划创建一个临时表,该表将有12行。每行都有类似的数据(我们将计算每个Point的startdate和endDate):
Point StartDate EndDate TotalOrders
Point12 2013-01-24 2013-01-30
Point11 2013-01-17 2013-01-23
在此之后,我们将获得每行的count
个订单。
这是解决此问题的好方法还是可以优化?
修改
每周DateRange为Custom date Range of 7 Days
。
答案 0 :(得分:1)
鉴于这是SQLServer,我建议使用表变量,而不是临时表。
另一种方法是在CTE中生成12行作为主查询的一部分,而不是在主查询之前生成所需的行(在表变量/临时表中)作为单独的步骤。这将减少所需的步骤总数,但会使主要查询稍微复杂一些。
答案 1 :(得分:-1)
为什么不将周用作分组因子?
SELECT
WEEKOFYEAR(`date`) AS point,
SUM(orders) AS order
FROM `tablename`
WHERE `date` BETWEEN `startdate` AND `enddate`
GROUP BY point