【问题标题】:SQL query get business days from two date columnsSQL查询从两个日期列中获取工作日
【发布时间】:2015-07-27 15:51:50
【问题描述】:

我有一个包含两列的 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 天。我想知道如何合并这两个以获得上述两个列以及第三个列。

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

【问题讨论】:

    标签: mysql sql calendar


    【解决方案1】:

    如果 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多