mysql - 给定一个包含时间段的表,查询每天的总和列表

标签 mysql sql oracle

假设我有一个表格,其中显示了在两个日期之间有多少项是有效的。 此外,可能有多个这样的时期。

例如,给定一个表:

itemtype  | count | start       | end
A         | 10    | 2014-01-01  | 2014-01-10
A         | 10    | 2014-01-05  | 2014-01-08

这意味着有 10 个类型 A 的项目在 2014-01-01 - 2014-01-10 有效,此外,还有 10 个在 2014-01-05 - 2014-01-08 有效。 因此,例如,2014-01-06 的有效项目总和为 20。 如何查询表格以获取每天的总和?我想要这样的结果

2014-01-01  10
2014-01-02  10
2014-01-03  10
2014-01-04  10
2014-01-05  20
2014-01-06  20
2014-01-07  20
2014-01-08  20
2014-01-09  10
2014-01-10  10

这可以用 SQL 完成吗? Oracle 或 MySQL 都可以

最佳答案

您要查找的基本语法如下:

对于下面的示例,我定义了一个名为 DateTimePeriods 的新表其中有一列 StartDateEndDate两者都是DATE列。

SELECT 
    SUM(NumericColumnName)
    , DateTimePeriods.StartDate
    , DateTimePeriods.EndDate
FROM 
    TableName
    INNER JOIN DateTimePeriods ON TableName.dateColumnName BETWEEN DateTimePeriods.StartDate and DateTimePeriods.EndDate
GROUP BY 
    DateTimePeriods.StartDate
    , DateTimePeriods.EndDate

显然上面的代码不能在你的数据库上运行,但应该给你一个合理的起点。你应该看看 GROUP BY Aggregate Functions .我也不确定 BETWEEN 有多普遍适用于每种数据库类型,但您可以使用其他比较来做到这一点,例如 <=>= .

关于mysql - 给定一个包含时间段的表,查询每天的总和列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22667228/

相关文章:

php - 如何在 Laravel 中设置一年后的到期日期

oracle - Oracle 8i 中 DBMS_METADATA.GET_DLL 的替代方案

mysql - 将数据插入 JOIN SELECT QUERY 产生的表中?

asp.net - MySQL/ASP.NET 存储过程

sql - 左连接多个表到一个表

sql - Mysql:优化在嵌套集合树中查找 super 节点

mysql - 优化搜索查询

php - 如何将json对象插入到mysql表中

java - 从迭代列表中保存对象

php - php中的mysql_query函数