如何从mysql中的日期范围之间获取一周中特定日期的计数?

时间:2014-06-26 10:01:44

标签: mysql sql

我有一张桌子" task_table"包含列 -

Task_id,Start_date,End_date

我还有一个"配置"具有记录的表格,该记录表明一周中的哪几天是工作日。 该表有两列 -

week_day,isHoliday

并且此表包含七个记录,因为week_days是星期一,星期二.....星期日,并且每条记录都有一个条目为1或0.如果一天是任何组织中的假日,那么将有0对此天。就像一个组织每周三和周五都有假期一样,那么周三和周五就会有0个假期。

现在,我想创建一个SQL查询来获取Task_id,Start_date,End_date以及每项任务消耗的总天数。 (这些天是任务start_date和end_date之间的天数,不包括在"配置"表中配置的假日天数。)

1 个答案:

答案 0 :(得分:1)

我现在没有时间完全回答这个问题,但我会做的是:

获取Start_date周开始时的日期,以及End_date周结束时的日期(您可以根据星期几date_add获得此日期。

然后你想要对它们进行日期差异,除以7,乘以2,然后删除你想要添加的任何数据(例如,如果开始日期是星期四,那么你需要从结果中删除一个,如你将在紧接着的星期三计算一个。

我明天会写出这些代码(它已经很晚了 - 比如现在大约14个小时左右。)如果其他人没有提出更好的答案的话。

编辑:对,没有正确阅读这个问题,但这个策略仍适用于一点点摆弄。说到这些,here is the fiddle of my solution

归结为以下代码:

set @holidaysPerWeek = (select sum(isHoliday) from configuration);

select 
  Task_id,
  ((dateDiff(
    DATE_ADD(End_Date, INTERVAL 7 - DayOfWeek(End_Date) DAY),
    DATE_ADD(Start_Date, INTERVAL -DayOfWeek(Start_Date) + 1 Day)) + 1) / 7)
    * @holidaysPerWeek
    - (select sum(isHoliday) from configuration where week_day > DayOfWeek(End_Date))
    - (select sum(isHoliday) from configuration where week_day < DayOfWeek(Start_Date)),
  DayOfWeek(End_Date)
from task_table

这正是我之前所说的,但是周期数为#34;如果整个星期都被覆盖,则首先选择整个星期的假期数,然后分别删除分别在开始日期和结束日期之前或之后的假期。