SQL - 显示自创建特定记录(新列)以来经过的时间



我创建了一些代码,允许我在特定子症状之后显示数据中的每条记录

SELECT
ID,
Received,
Closed,
Subsymptom,
DATEDIFF(HOUR, received, COALESCE(closed, GETDATE())) AS 'HoursOpen'
FROM
vw_UserView_OpenAndClosed A
WHERE closed > 
(SELECT  MAX(closed)
FROM    
vw_UserView_OpenAndClosed SUB
WHERE   
Subsymptom = 'INSTALL'
AND received >= '2017-06-01'
AND SUB.name = A.name)

数据如下所示

ID      received    closed      Subsymptom            HoursOpen
1306438 2017-06-20  2017-06-21  ISSUES                19
1305393 2017-06-18  2017-06-19  REQUEST               12    
1299203 2017-06-05  2017-06-05  REQUEST               0
1299415 2017-06-05  2017-06-06  SPECIFIC FAILURE      2

我希望能够做的是创建一个新列,告诉我自引发名为"INSTALL"的原始子症状以来已经过去了多少时间。

ID 可能有间隙,我将有多个"名称"

我已经尝试了选择 Max(已关闭(加入,但我根本无法让它工作,我认为我走在完全错误的轨道上并且有一些头脑模糊。

示例数据

ID      Received    Closed     Subsymptom       Name     
1306438 2017-06-20  2017-06-21 ISSUES           BROOM       
1299203 2017-06-05  2017-06-05 REQUEST          BROOM       
1305393 2017-06-18  2017-06-19 REQUEST          CHIVE       
1299415 2017-06-06  2017-06-06 SPECIFIC FAILURE BROOM       
1299222 2017-06-05  2017-06-05 ISSUES           BROOM       
1299112 2017-06-05  2017-06-05 CONTACTLESS      BROOM
1279168 2017-06-01  2017-06-03 INSTALL          BROOM
1287965 2017-06-10  2017-06-10 INSTALL          CHIVE

期望的结果

ID      Received    Closed     Subsymptom       Name     HoursOpen  Days Received since Install Closed
1306438 2017-06-20  2017-06-21 ISSUES           BROOM    19         17
1299203 2017-06-05  2017-06-05 REQUEST          BROOM    0          2
1305393 2017-06-18  2017-06-19 REQUEST          CHIVE    12         21
1299415 2017-06-06  2017-06-06 SPECIFIC FAILURE BROOM    2          3
1299222 2017-06-05  2017-06-05 ISSUES           BROOM    0          2
1299112 2017-06-05  2017-06-05 ISSUES           BROOM    0          2

安装关闭后的接收天数 - 计算从安装结束日期到接收日期的天数。

(稍后将绘制图表,以显示安装后在第 0、1、2、3 天等收到新记录(

编辑:感谢您澄清您的评论并添加所需的示例数据。 一旦我有了它,它就是微风。 因此,将来请务必在发布问题时添加它,以确保最快的响应!

这是代码:

DECLARE @Table TABLE (ID bigint, Received DATETIME, Closed DATETIME, Subsymptom varchar(50), [Name] varchar(50))
DECLARE @Now DateTime = GETDATE()
INSERT INTO @Table
VALUES
(1306438 , '2017-06-20', '2017-06-21', 'ISSUES', 'BROOM'),
(1299203 , '2017-06-05', '2017-06-05', 'REQUEST', 'BROOM'),
(1305393 , '2017-06-18', '2017-06-19', 'REQUEST', 'CHIVE'),
(1299415 , '2017-06-06', '2017-06-06', 'SPECIFIC FAILURE', 'BROOM'),
(1299222 , '2017-06-05', '2017-06-05', 'ISSUES', 'BROOM'),
(1299112, '2017-06-05', '2017-06-05', 'CONTACTLESS', 'BROOM'),
(1279168 , '2017-06-01', '2017-06-03', 'INSTALL', 'BROOM'),
(1287965 , '2017-06-10', '2017-06-10', 'INSTALL', 'CHIVE')
SELECT  T.ID, 
T.Received, 
T.Closed, 
T.Subsymptom,
T.[Name],
DATEDIFF(HH, T.Received, COALESCE(T.Closed, @Now)) AS 'HoursOpen',
DATEDIFF(DD, T2.Closed, T.Received) AS [Days Received since Install Closed]
FROM @Table T
JOIN @Table T2
ON T.[Name] = T2.[Name]
AND T2.Subsymptom = 'INSTALL'
WHERE T.Closed > T2.Closed

以下是结果:

(6 row(s) affected)
ID                   Received                Closed                  Subsymptom                                         Name                                               HoursOpen   Days Received since Install Closed
-------------------- ----------------------- ----------------------- -------------------------------------------------- -------------------------------------------------- ----------- ----------------------------------
1306438              2017-06-20 00:00:00.000 2017-06-21 00:00:00.000 ISSUES                                             BROOM                                              24          17
1299203              2017-06-05 00:00:00.000 2017-06-05 00:00:00.000 REQUEST                                            BROOM                                              0           2
1305393              2017-06-18 00:00:00.000 2017-06-19 00:00:00.000 REQUEST                                            CHIVE                                              24          8
1299415              2017-06-06 00:00:00.000 2017-06-06 00:00:00.000 SPECIFIC FAILURE                                   BROOM                                              0           3
1299222              2017-06-05 00:00:00.000 2017-06-05 00:00:00.000 ISSUES                                             BROOM                                              0           2
1299112              2017-06-05 00:00:00.000 2017-06-05 00:00:00.000 CONTACTLESS                                        BROOM                                              0           2
(6 row(s) affected)

您保证的是,每个名称只有一个"安装"子症状实例。 如果是这种情况,此查询将始终有效。 我的结果与您的结果不同的原因是因为您只提供了日期(而不是日期时间(,因此计算会略有偏差。 但是,基本上,您只需将每条记录连接到其原始安装中 - 获取原始记录的关闭时间 - 并将其与当前记录的接收时间进行比较。 非常简单 - 而且直截了当。

如果这不是您要找的,请告诉我。

最新更新