【问题标题】:Find all data in date range then calculate total per month查找日期范围内的所有数据,然后计算每月总数
【发布时间】:2016-09-02 13:11:56
【问题描述】:

我有一个 mysql 表,其中每条记录都有一个startDateTime 和一个finishDateTime。我希望能够返回每个月的总时间。

我目前的查询是这样的:

$dateRange = "BETWEEN '$startDate' AND '$finishDate'"; 

$sql = 
"SELECT 
    TIMESTAMPDIFF(MINUTE, StartDateTime, FinishDateTime) As Duration,
    StartDateTime As Start, FinishDateTime As Finish
FROM Entries
WHERE StartDateTime $dateRange AND FinishDateTime $dateRange";

表格条目

| StartDateTime       | FinishDateTime |
| 2016-08-18 10:00:00 | 2016-08-18 11:00:00 |
| 2016-08-18 12:00:00 | 2016-08-18 14:00:00 |
| 2016-08-31 17:00:00 | 2016-09-01 09:00:00 |

Desired Output
| Month               | Duration       |
| Aug                 | 10             |
| Sept                | 9              |

这将返回每条记录的持续时间,但不返回每个月的总数。我需要在此查询中添加或更改什么以获得所需的数据?

【问题讨论】:

标签: mysql sql


【解决方案1】:

假设每个条目都在同一个月开始和完成,请尝试以下操作:

$sql = 
    "SELECT 
        SUM(TIMESTAMPDIFF(HOUR, StartDateTime, FinishDateTime)) As Duration
    FROM Entries
    WHERE 
        YEAR(StartDateTime) = YEAR(FinishDateTime) 
        AND MONTH(StartDateTime) = MONTH(FinishDateTime)
        AND StartDateTime $dateRange 
        AND FinishDateTime $dateRange
    GROUP BY MONTH(StartDateTime)";

【讨论】:

  • 您将如何处理从一个月末到下个月月初的记录?
  • 您可以检查 StartDateTime 和 FinishDateTime 的月份和年份是否相同。检查更新的答案。
  • 你是对的。我没有提交更改。再次检查。
  • 这似乎不起作用。日期范围部分为 AND St​​artDateTime BETWEEN '2016-08-02 00:00:00' AND '2016-09-02 23:59:59' AND FinishDateTime BETWEEN '2016-08-02 00:00:00' AND '2016-09-02 23:59:59' 我得到了 8 月的 19 小时,而不是 8 月的 10 小时和 9 月的 9 小时
  • 答案中的当前查询提供了同月开始和结束的条目的总小时数。它为 8 月打印 3 小时。我认为你想要的远比这复杂。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多