mysql - 计算 MySQL 表中时间戳内的天数

标签 mysql sql datetime group-by

假设我有一个包含以下记录的表:SQL Fiddle

| category |               begin |                 end |
|----------|---------------------|---------------------|
|        a | 2017-09-26 08:00:00 | 2017-09-27 10:00:00 |
|        b | 2017-10-02 13:00:00 | 2017-10-03 07:00:00 |
|        a | 2017-10-06 02:00:00 | 2017-10-06 09:00:00 |
|        a | 2017-10-06 11:00:00 | 2017-10-06 14:00:00 |
|        a | 2017-10-06 19:00:00 | 2017-10-08 10:00:00 |

我希望能够计算每个类别(在开始和结束之间)的不同天数的总数。因此:类别 a 包含 9 月 26 日至 27 日和 10 月 6 日至 8 日期间(其中 10 月 6 日出现在多个记录中),而类别 b 仅包含 10 月 2 日至 3 日期间。因此,我希望得到以下结果:

| category | days |
|----------|------|
|        a |    5 |
|        b |    2 |

来自一些 GROUP BY category 语句。这在 (My)SQL 中可能吗?

最佳答案

一个可能的解决方案是构建一个“引用表”,其中包含适合您的情况的所有可能日期。 (例如,您可以将此填充到 future 20 年和过去 20 年。)为此 sqlfiddle ,我刚刚填写了必要的天数。我创建了带有单个日期列 dayref_dates,并使用了以下 sql:

select category,
count(distinct day)
from times
inner join ref_dates 
    on cast(begin as date) <= day 
    and day <= cast(end as date)
group by category;

关于mysql - 计算 MySQL 表中时间戳内的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46635908/

相关文章:

C# 反射 : Emit DateTime Property Value

sql - 如何用 R 分析维基百科文章数据库?

mysql - SQL 选择不同但详尽的列

mysql - 如何通过phpmyadmin在MySQL数据库中存储大量数据?

python - MysqlPython : Not all parameters were used in MySQL statement

php - SQL_BIG_SELECTS,优化我的查询

MySQL LEFT JOIN 与 GROUP BY 和 WHERE IN(子查询)

c# - 在插入 MySql 数据库的 DateTime 对象上获取 "System.FormatException: Input string was not in a correct format."

sql - Excel 中 SQL 表的动态查询

python - Pandas 将小时索引整数转换为日期时间