在各自的日期分发日期范围持续时间

时间:2016-06-02 06:59:49

标签: sql-server

给定事件开始和结束时间的日期集,我想计算经过的持续时间。这些持续时间必须按照设备(类别)求和,并在它们出现的各个日期分布。

我有一个类似于下面显示的数据集。

Example Dataset

使用以下SQL查询生成此数据集。

    SELECT
    EquipmentDetailsDataModel.EquipmentDetails.Equipment
    ,StoppagesDataModel.StoppagesEvent.PlannedDownTime
    ,StoppagesDataModel.StoppagesEvent.PlannedUpTime

    FROM
    StoppagesDataModel.StoppagesEvent

    INNER JOIN EquipmentDetailsDataModel.EquipmentDetails
    ON StoppagesDataModel.StoppagesEvent.EquipmentKey = EquipmentDetailsDataModel.EquipmentDetails.EquipmentKey
    WHERE
    EquipmentDetailsDataModel.EquipmentDetails.Equipment IN ('22262','21617')
    AND StoppagesDataModel.StoppagesEvent.PlannedDownTime >= N'06/01/2016 00:00:00'

这基本上是一个设备将停机以进行维护的日期列表(通常称为事件)

我正在寻找类似于以下的输出。有些事件可以重叠,但设备每天只能停机24小时。

Equipment   Date    Down Hrs
22262   01/06/2016  5.5
22262   02/06/2016  4.1
22262   03/06/2016  1.2
22262   04/06/2016  0
22262   05/06/2016  9.4
22262   06/06/2016  15
22262   07/06/2016  24
22262   08/06/2016  15
22262   09/06/2016  10.8
22262   10/06/2016  0.25
22262   … etc       … etc
21617   01/06/2016  3.0
21617   02/06/2016  5.2
21617   03/06/2016  1.7
21617   04/06/2016  0
21617   05/06/2016  9.4
21617   06/06/2016  15
21617   07/06/2016  23
21617   08/06/2016  0
21617   09/06/2016  16.8
21617   10/06/2016  0.25
21617   … etc       … etc
… etc   … etc       … etc

我可以使用内置的系统表来返回查询的连续日期范围。

SELECT
  SystemTableDataModel.ReportDate.[DATE]
FROM
  SystemTableDataModel.ReportDate
WHERE
  SystemTableDataModel.ReportDate.[DATE] >= N'05/01/2016 00:00:00'
  AND SystemTableDataModel.ReportDate.[DATE] < N'06/01/2016 00:00:00'

这提供了一个可以使用的连续日期范围。

Date range from system table

我正在努力开始研究如何编写此查询

2 个答案:

答案 0 :(得分:0)

"appRoles": [
{
"allowedMemberTypes": [
    "User"
  ],
  "description": "Admins can manage roles and perform all actions.",
  "displayName": "Global Admin",
  "id": "7c93906c-71fa-4e5b-b1da-21b073d298fd",
  "isEnabled": true,
  "value": "Admin"
}
]

- 说实话,它并没有消除重叠,但是如果你能在一天内上下起伏,你就更近了

答案 1 :(得分:0)

@SuppressFBWarnings("JLM_JSR166_UTILCONCURRENT_MONITORENTER")