假设我有一个笔记表,其中包含(除其他外)一个条目,表明员工何时开始/结束项目工作;只有一个注释表示“开始”,但可能有许多不同的条目表示“结束”(我们会忽略任何额外的“结束”日期“)。有时会有多个人在工作该项目,以及没有人参与该项目的时间。
我需要查询表格,以确定项目有人在其上工作的天数:
projectID dateStart dateEnd
--------- ---------- ----------
20769720 2018-01-26
20769720 2018-01-29
20769720 2018-02-02
20769720 2018-03-20
20825496 2018-02-07
20825496 2018-02-12
20825496 2018-03-07
20825496 2018-03-15
上表是我们提取的描述开始/结束日期的“关键”事件,可以看到:
[Project 20769720]有人在1月26日至29日(4天)工作; [项目20825496]有人工作时间为2月7日至3月7日(28天),3月15日至今(19天)=总共47天
我们考虑将数据暂存到临时表并使用多个更新处理数据,但我们无法为此创建临时表,游标或存储过程;这一切都必须在一个查询中,返回:
projectID days
--------- ----
20769720 4
20825496 47
答案 0 :(得分:0)
获取min dateStart和max dateEnd,找出差异。请记住,项目启动和停止(即工作中存在差距),这将无法正常工作。
SELECT
projectID,
DATEDIFF(min(dateStart),max(dateEnd)) as `days`
FROM projectLog a
GROUP BY projectID