这是为此报告编写SQL的最佳方法吗?

时间:2013-02-12 07:18:47

标签: sql sql-server-2008 count group-by

我们有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

enter image description here

2 个答案:

答案 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
相关问题