简单来说,我希望在4周内从表中提取汇总数据,但每周分组。可以安全地假设我们可以“强制”某个特定日期或时间(尽管允许输入任何日期并根据输入的日期运行查询会很好。)
例如,查询的结果数据如下所示:
start_date | end_date | count_of_sales
---------------------------------------------------------------
2014-03-03 04:00:00 | 2014-03-10 03:59:59 | 375
2014-03-10 04:00:00 | 2014-03-17 03:59:59 | 375
2014-03-17 04:00:00 | 2014-03-24 03:59:59 | 375
2014-03-24 04:00:00 | 2014-03-31 04:00:00 | 200
这可能源于仅具有日期的未分类数据(当然还有其他数据,但这是无关紧要的):
saleDate | repID | productID
---------------------------------------------------------------
2014-03-04 12:36:33 | 1235 | 443
2014-03-09 07:08:12 | 1235 | 493
2014-03-09 10:12:44 | 3948 | 472
2014-03-21 23:33:01 | 2957 | 479
在我看来,查询看起来很像(虽然准确),如下所示:
SELECT start_date, end_date, COUNT(*) FROM table WHERE date < '2014-03-31 04:00:00' GROUP BY date
我理解上面的查询并不了解回看的时间长度(理想情况下客户进入最终日期,也许可能需要提前几周的数据)这就是为什么我遗漏了BETWEEN约会的条款(他们可能不知道确切的“开始”日期。
很抱歉,如果这令人困惑,但希望样本SQL(虽然错误)和期望的结果会给出更清晰的图片
答案 0 :(得分:0)
如果我的问题正确无误,那么下面的代码可以帮到你, 为了澄清:我给出的代码是SQL Server。
With CTE as
(
Select 1 as pID,'2014-03-03 04:00:00' as startDate,'2014-03-10 03:59:59' as endDate
Union All
Select 2,'2014-03-10 04:00:00','2014-03-17 03:59:59'
Union All
Select 3,'2014-03-17 04:00:00','2014-03-24 03:59:59'
Union All
Select 4,'2014-03-24 04:00:00','2014-03-31 04:00:00'
)
select a.pID,a.startDate,a.endDate,count(*) from CTE as a
inner join MyTable on myDateCol between a.startDate and a.endDate
group by a.pID,a.startDate,a.endDate
演示 SQL Fiddle