【问题标题】:Calculating time difference and summing based on another column基于另一列计算时间差和求和
【发布时间】:2013-03-12 13:31:29
【问题描述】:

我有一个这样的表,其中包含如下数据

ReferenceNo                 CommentDate             StepName            Originator  StartTime
1   CHQRCL/0083/2013/FEB    2013-02-25 15:20:07.000 Initiate Process    P8Admin 2013-02-25 15:20:07.000
1   CHQRCL/0083/2013/FEB    2013-02-25 15:20:44.000 Finance Controller  P8Admin 2013-02-25 15:20:07.000
1   CHQRCL/0083/2013/FEB    2013-02-25 15:21:52.000 Originator  P8Admin 2013-02-25 15:20:07.000
1   CHQRCL/0083/2013/FEB    2013-02-25 15:23:26.000 Finance Controller  P8Admin 2013-02-25 15:20:07.000
1   CHQRCL/0083/2013/FEB    2013-02-25 15:23:55.000 Finance Officer P8Admin 2013-02-25 15:20:07.000
2   CHQRCL/0089/2013/FEB    2013-02-25 15:43:48.000 Initiate Process    P8Admin 2013-02-25 15:43:48.000
2   CHQRCL/0089/2013/FEB    2013-02-25 15:43:59.000 Finance Controller  P8Admin 2013-02-25 15:43:48.000
2   CHQRCL/0089/2013/FEB    2013-02-25 15:44:11.000 Asset GM    P8Admin 2013-02-25 15:43:48.000
3   CHQRCL/0093/2013/MAR    2013-03-06 16:19:05.000 Initiate Process    P8Admin 2013-03-06 16:19:05.000
3   CHQRCL/0093/2013/MAR    2013-03-06 16:21:57.000 Finance Controller  P8Admin 2013-03-06 16:19:05.000
3   CHQRCL/0093/2013/MAR    2013-03-06 16:23:55.000 Asset GM    P8Admin 2013-03-06 16:19:05.000
3   CHQRCL/0093/2013/MAR    2013-03-06 16:24:09.000 CFO P8Admin 2013-03-06 16:19:05.000
3   CHQRCL/0093/2013/MAR    2013-03-06 16:24:19.000 CEO P8Admin 2013-03-06 16:19:05.000
3   CHQRCL/0093/2013/MAR    2013-03-06 16:24:40.000 Finance Officer P8Admin 2013-03-06 16:19:05.000
4   CHQRCL/0094/2013/MAR    2013-03-06 16:58:47.000 Initiate Process    P8Admin 2013-03-06 16:58:47.000
4   CHQRCL/0094/2013/MAR    2013-03-06 17:00:45.000 Finance Controller  P8Admin 2013-03-06 16:58:47.000
4   CHQRCL/0094/2013/MAR    2013-03-06 17:00:54.000 Asset GM    P8Admin 2013-03-06 16:58:47.000
4   CHQRCL/0094/2013/MAR    2013-03-06 17:04:48.000 CFO P8Admin 2013-03-06 16:58:47.000
4   CHQRCL/0094/2013/MAR    2013-03-06 17:05:06.000 CEO P8Admin 2013-03-06 16:58:47.000
4   CHQRCL/0094/2013/MAR    2013-03-06 17:05:35.000 Finance Officer P8Admin 2013-03-06 16:58:47.000
5   CHQRCL/0108/MAR/2013    2013-03-10 08:58:22.000 Initiate Process    Mohamed Ubaid   2013-03-10 08:58:22.000
5   CHQRCL/0108/MAR/2013    2013-03-10 09:06:23.000 Finance Controller  Mohamed Ubaid   2013-03-10 08:58:22.000
5   CHQRCL/0108/MAR/2013    2013-03-10 09:07:06.000 Finance Officer Mohamed Ubaid   2013-03-10 08:58:22.000
6   CHQRCL/0110/MAR/2013    2013-03-10 09:26:10.000 Initiate Process    Allan C Fampulme    2013-03-10 09:26:10.000
6   CHQRCL/0110/MAR/2013    2013-03-10 09:32:34.000 Finance Controller  Allan C Fampulme    2013-03-10 09:26:10.000
6   CHQRCL/0110/MAR/2013    2013-03-10 09:33:22.000 Asset GM    Allan C Fampulme    2013-03-10 09:26:10.000
6   CHQRCL/0110/MAR/2013    2013-03-10 09:35:39.000 Originator  Allan C Fampulme    2013-03-10 09:26:10.000
6   CHQRCL/0110/MAR/2013    2013-03-10 09:36:06.000 Asset GM    Allan C Fampulme    2013-03-10 09:26:10.000
6   CHQRCL/0110/MAR/2013    2013-03-10 09:36:20.000 CFO Allan C Fampulme    2013-03-10 09:26:10.000
6   CHQRCL/0110/MAR/2013    2013-03-10 09:36:41.000 CEO Allan C Fampulme    2013-03-10 09:26:10.000
6   CHQRCL/0110/MAR/2013    2013-03-10 09:37:34.000 Finance Officer Allan C Fampulme    2013-03-10 09:26:10.000

首先,我想要每个参考号的每个步骤所花费的时间(例如,对于参考号 1 的财务控制器,它需要 37 秒)。我想计算平均值(以相同的财务控制器步骤为例;1 refNo + 94 秒再次在 1refNo + 11 秒在 2refNo + 等中除以 6 需要 7 秒)

【问题讨论】:

  • 我试过 WITH CTE AS( SELECT ROW_NUMBER()OVER(PARTITION BY ReferenceNo ORDER BY CommentDate)As RowNum , * FROM FNCUSTOM.dbo.WorkflowHistory T --where stepname != 'Initiate Process' ) SELECT DiffSec=DATEDIFF(s,CommentDate,(SELECT CommentDate FROM CTE c2 WHERE c2.ReferenceNo = CTE.ReferenceNo AND c2.RowNum=CTE.RowNum+1)) , ReferenceNo , StepName , CommentDate FROM CTE where referenceno='CHQRCL/0157 /MAR/2013' ORDER BY ReferenceNo, RowNum;
  • 给出以下输出
  • DiffSec ReferenceNo StepName CommentDate 37 CHQRCL/0083/2013/FEB 启动过程 2013-02-25 15:20:07.000 68 CHQRCL/0083/2013/FEB 财务控制器 2013-02-25 15:20 :44.000 94 CHQRCL/0083/2013/FEB 发起人 2013-02-25 15:21:52.000 29 CHQRCL/0083/2013/FEB 财务总监 2013-02-25 15:23:26.000 NULL CHQRCL/0083/2013/FEB 财务官 2013-02-25 15:23:55.000
  • 其中启动流程为 37 秒,而启动流程应为 NULL / 0,这 37 秒应用于下一步,即“财务控制器”
  • @JamieF 时差计算正确,但步骤名称错误。

标签: sql reporting-services


【解决方案1】:

我使用以下查询解决了我的问题,

与 CTE 作为(
SELECT ROW_NUMBER()OVER(PARTITION BY ReferenceNo ORDER BY CommentDate)As RowNum, *
FROM FNCUSTOM.dbo.WorkflowHistory T
)

SELECT ReferenceNo, StepName, CommentDate, DiffDays = DATEDIFF(s, (从 CTE c2 选择 CommentDate,其中 c2.ReferenceNo = CTE.ReferenceNo AND c2.RowNum=CTE.RowNum-1),CommentDate)/60.0 / 60.0 / 24.0
来自 CTE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-23
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    相关资源
    最近更新 更多