mysql - SQL查询从两个日期列中获取工作日

标签 mysql sql calendar

我有一个包含两列的 sql 表。一列名为 dateUpdated,另一列名为 dateReported。我希望创建第三列,其中包含每一行的 dateUpdated 和 dateReported 之间的工作日整数值。 dateUpdated 将始终是 dateReported 值之后或之上的日期。例如,表格可能如下所示:

DATE UPDATED   Date Reported
2015-06-23     2015-06-02
2015-06-05     2015-06-04
2015-06-23     2015-06-15
2015-06-17     2015-06-04
2015-06-23     2015-06-27
2015-06-23     2015-06-04
2015-06-08     2015-06-04

第三列应该是每行两列之间的工作日数。我当前的 sql 看起来像这样

select date(time_of_update) as updated, 
rep.date_reported as dateReported
from history hist left join reports rep
on hist.name = rep.name
left join calendar cal 
on rep.date_reported = cal.calendar_date;

我的日历表有一列包含所有日期,还有一个关联列标记它们是否为工作日。例如,我可以运行类似

select sum(is_business_day) from calendar where 
calendar_date between '2015-06-02' and '2015-06-23';

我会得到 16 天。我想知道如何合并这两个以获得上述两个列以及第三个列。

子查询是可以接受的,如果这是唯一的方法的话。谢谢!

最佳答案

如果 dt_tbl 是包含 dateUpdated 和 dateReported 的表,而 calendar 是日历日期表,则执行以下操作:

select
 a.dateUpdated
, a.dateReported
, sum(is_business_day) num_business_days
from
 dt_tbl a
left join
 calendar c on c.calendar_date between a.dateReported and a.dateUpdated
group by
 a.dateUpdated
, a.dateReported

关于mysql - SQL查询从两个日期列中获取工作日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31657674/

相关文章:

java - 尝试切换到(使用)数据库时出现 JDBC "Error in MySQL Syntax"

sql - 将Excel公式转换为SQL查询

sql - Postgresql 触发器功能似乎阻止插入任何记录

android - android中 GridView 中的不同列名

java - 日历输入忽略下一个输入行

mysql - 嵌套查询——有没有更聪明的方法

mysql - Elasticsearch 、Logstash、MySQL : how do I speed up a large import?

php - Laravel 5.0 [PDOException] SQLSTATE [HY000] : General error: 1215 Cannot add foreign key constraint

MySQL SUM 同时保持求和数据独立

android - 泰米尔日历 View