查询事件持续时间

时间:2018-04-03 15:49:33

标签: mysql tsql

假设我有一个笔记表,其中包含(除其他外)一个条目,表明员工何时开始/结束项目工作;只有一个注释表示“开始”,但可能有许多不同的条目表示“结束”(我们会忽略任何额外的“结束”日期“)。有时会有多个人在工作该项目,以及没有人参与该项目的时间。

我需要查询表格,以确定项目有人在其上工作的天数:

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

1 个答案:

答案 0 :(得分:0)

获取min dateStart和max dateEnd,找出差异。请记住,项目启动和停止(即工作中存在差距),这将无法正常工作。

SELECT
    projectID,
    DATEDIFF(min(dateStart),max(dateEnd)) as `days`
FROM projectLog a
GROUP BY projectID