假设我有一个表格,其中显示了在两个日期之间有多少项是有效的。 此外,可能有多个这样的时期。
例如,给定一个表:
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
的新表其中有一列 StartDate
和 EndDate
两者都是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/