码迷,mamicode.com
首页 > 数据库 > 详细

Sql同一列中两条数据时间差计算

时间:2018-08-10 01:25:10      阅读:550      评论:0      收藏:0      [点我收藏+]

标签:arc   partition   number   drop   info   div   select   weight   varchar   

问题:从提出需求到需求通过,中间会经历不确定次数的“驳回->撤销驳回”的操作,所有的操作时间都位于同一列。求:需求从提出到通过经历的时间(不包含“驳回-撤销驳回”所消耗的时间)

PS: “驳回->撤销驳回”操作成对出现;且按时间顺序排列。

 

1. 建表

IF OBJECT_ID(tempdb..#logs,U)is NOT NULL DROP TABLE #logs
IF OBJECT_ID(tempdb..#logs2,U)is NOT NULL DROP TABLE #logs2
IF OBJECT_ID(tempdb..#logs3,U)is NOT NULL DROP TABLE #logs3

CREATE TABLE #logs(
    ODate DATETIME
    ,Operation VARCHAR(20)
    ,ID INT
);
INSERT INTO #logs VALUES(2018-08-09 09:00:00,提交需求,1);
INSERT INTO #logs VALUES(2018-08-09 10:00:00,驳回,1);
INSERT INTO #logs VALUES(2018-08-09 11:30:00,撤销驳回,1);
INSERT INTO #logs VALUES(2018-08-09 12:00:00,驳回,1);
INSERT INTO #logs VALUES(2018-08-09 13:10:00,撤销驳回,1);
INSERT INTO #logs VALUES(2018-08-09 13:50:00,驳回,1);
INSERT INTO #logs VALUES(2018-08-09 19:00:00,撤销驳回,1);
INSERT INTO #logs VALUES(2018-08-09 22:00:00,通过,1);

INSERT INTO #logs VALUES(2018-08-10 09:00:00,提交需求,2);
INSERT INTO #logs VALUES(2018-08-10 10:00:00,驳回,2);
INSERT INTO #logs VALUES(2018-08-11 11:30:00,撤销驳回,2);
INSERT INTO #logs VALUES(2018-08-11 12:00:00,驳回,2);
INSERT INTO #logs VALUES(2018-08-11 13:00:00,撤销驳回,2);
INSERT INTO #logs VALUES(2018-08-11 22:00:00,通过,2);

结果如图:

技术分享图片 

 

2. 按ID分组,对时间进行排序编号

--对时间进行排序并编号
SELECT ID,ODate,Operation,ROW_NUMBER() OVER (PARTITION BY id ORDER BY ODate)RowNum 
INTO #logs2 
FROM #logs

结果如图:

技术分享图片

 

3. 将下一操作执行时间追加到本行末尾

--新增列:下一步操作的时间
SELECT ID,Operation,ODate AS ADate ,
(
    SELECT ODate FROM #logs2 WHERE rownum=t.rownum+1 and ID=t.id
)AS BDate
INTO #logs3 
FROM #logs2 t

 结果如图:

技术分享图片

 

4. 计算结果

--计算需求提出到通过耗时(剔除驳回到撤销驳回耗时)
SELECT ID,SUM(DATEDIFF(MI,ADate,Bdate)) CostTime FROM #logs3
WHERE Operation<>驳回
GROUP BY ID

 技术分享图片

 

Sql同一列中两条数据时间差计算

标签:arc   partition   number   drop   info   div   select   weight   varchar   

原文地址:https://www.cnblogs.com/dunr/p/9452555.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!