如何按周数对PostgreSQL数据进行排序

时间:2014-04-04 04:38:53

标签: sql database postgresql

简单来说,我希望在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(虽然错误)和期望的结果会给出更清晰的图片

1 个答案:

答案 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