【发布时间】:2013-02-12 07:18:46
【问题描述】:
我们有orders 数据,我们需要使用SQL 生成Weekly - Custom date Range of 7 Daysreport。该报告将每周显示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 TotalOrders
Point12 2013-01-24 2013-01-30
Point11 2013-01-17 2013-01-23
在此之后,我们将获得每行的订单count。
这是解决这个问题的好方法还是可以优化?
编辑:
每周的 DateRange 将是 Custom date Range of 7 Days。
【问题讨论】:
-
@EdHeal:我可以自己做。但我只想知道我正在以最好的方式做到这一点。
-
在这种情况下,您应该使用 Table 变量以获得更好的性能。你可以阅读这篇关于差异的文章:sql-server-performance.com/2007/temp-tables-vs-variables
-
如何获得每一行的
count? -
循环遍历表中的所有 12 行并使用
SELECT COUNTWHEREOrderDate >= @StartDateOfThatRow和OrderDate <= @EndDateOfThatRow` -
@RomanBadiornyi - 该文章包含诸如未记录表变量的事务日志之类的神话。有关更准确的摘要,请参阅my answer here。行数较少的表变量结果更好的原因is explained here
标签: sql sql-server-2008 count group-by