SQL 查询 - 多个日期范围

Posted

技术标签:

【中文标题】SQL 查询 - 多个日期范围【英文标题】:SQL Query-Multiple date ranges 【发布时间】:2016-03-03 15:49:31 【问题描述】:

我想通过提供多个日期范围从数据库中获取一些数据。例如,在 2 月,我想按以下顺序从表中获取每周报告:2 月 1 日至 07 日、2 月 7 日至 14 日、2 月 14 日至 21 日、2 月 21 日至 28 日和 2 月 28 日至 3 月 1 日。在 DB 中,记录存储在每日明智而不是每周明智。我想每周将其聚类并计算总和然后显示结果。如果你知道这个案例,请帮助我。

要获得清晰的视图,请考虑 3 个表格及其列。

Table A:id,timestamp (comment-data is inserted daily)   
Table B:id,fruits  
Table C:id,fruits_type  

结果:

fruits_type count(id)   timestamp 
apple   3   01-02-2016 to 07-02-2016 
orange  5   01-02-2016 to 07-02-2016 
pineapple   8   01-02-2016 to 07-02-2016 
apple   4   07-02-2016 to 14-02-2016 
orange  5   07-02-2016 to 14-02-2016 

条件:id 应在 3 个表中匹配;通过按 fruits_type 提供分组来获取数据,并且时间戳应按周计算。

如果你知道,请帮忙

【问题讨论】:

请使用相关表格结构、一些示例数据和所需结果编辑您的问题。 您对每周计算的通用解决方案感兴趣还是只针对特定日期感兴趣? 对于清晰的视图,请考虑 3 个表及其列。表 A:id,timestamp (每天插入评论数据) 表 B:id,fruits 表 C:id,fruits_type 结果:fruits_type count(id) timestamp apple 3 01-02-2016 to 07-02-2016 orange 5 01 -02-2016 至 07-02-2016 菠萝 8 01-02-2016 至 07-02-2016 苹果 4 07-02-2016 至 14-02-2016 橙子 5 07-02-2016 至 14-02-2016 条件:id 应该在 3 个表之间匹配;通过按 fruits_type 和时间戳提供分组来获取数据应该是每周一次。如果您知道这一点,请提供帮助。 【参考方案1】:

要获得两个日期之间所有值的总和,您可以这样做:

SELECT SUM(Column1)
FROM Table1
WHERE Date1 BETWEEN '2/1/2016' AND Date1 <'2/7/2016'

如果您想让它更灵活并让查询获得上周的总和,您可以使用 DATEADD 函数延迟一周:

SELECT SUM(Column1)
FROM Table1
WHERE Date1 BETWEEN DATEADD(week, -1, GETDATE()) AND Date1 < GETDATE()

如果您希望结果集包含每周的一行,您可以使用 UNION 来合并查询。

【讨论】:

以上是关于SQL 查询 - 多个日期范围的主要内容,如果未能解决你的问题,请参考以下文章

具有两个或多个日期范围的 MDX 查询

尽量不在 SQL 查询中硬编码日期范围(Python、SQL 服务器)

sql 查询时间、日期范围内的数据

SQL从日期范围内的同一表中的不同记录中获取多个项目的总和(ORACLE)

SQL 如何查询日期在一定范围内的数据

使用未在 Mysql 中排序的多个日期范围查询给定月份的日期范围间隙