使用DATEDIFF计算员工执行任务的总天数,但仅计算指定时间段内的天数(MySQL)

qlvxas9a  于 2023-01-12  发布在  Mysql
关注(0)|答案(1)|浏览(148)

因此,我有一个表来保存执行某些任务的雇员的记录。一个任务有一个id、一个taskname、一个雇员以及一个startDate和endDate。
使用@MatBailie在这里提供给我的以下查询(谢谢!),我能够获取每个员工在本年度花在每个任务上的天数:

SELECT
taskname,
employee,
startDate,
endDate,
SUM(DATEDIFF(startDate, endDate)+1) AS total_days,
FROM
schedule
WHERE
startDate<='2023-12-31'
AND
endDate>='2023-01-01'
GROUP BY
employee,
taskname

但是,有时任务 * 会重叠两年 *,例如,当任务的startDate为12月22日,endDate为1月10日时,则该任务的总工期在当年为10天,在下一年为10天,这就是问题所在。因为它计算 * 所有20天 *,就好像它们在 * 今年 * 一样,因为事件符合startDate和endDate要求(“WHERE”子句),然后将整个持续时间加到SUM中。
所以我的问题是:我如何修改我的查询,使它只计算指定时间范围(即当前年份或季度)内的天数(以SUM(DATEDIFF)表示)。
提前感谢您的帮助!

qvtsj1bj

qvtsj1bj1#

SELECT
  taskname,
  employee,
  SUM(
    DATEDIFF(
      LEAST(     enddate, '2023-12-31'),
      GREATEST(startdate, '2023-01-01')
    )
    +1
  ) AS total_days,
FROM
  schedule
WHERE
  startDate <= '2023-12-31'
  AND
  endDate   >= '2023-01-01'
GROUP BY
  employee,
  taskname

相关问题