创建语句查询(TSQL)

时间:2017-03-31 08:17:36

标签: sql sql-server tsql

我有一个包含不同功能和步骤的日志文件:

screenshot

我需要的是整个功能的持续时间。 这是我到目前为止的声明:

SELECT [Id]
      ,[Func]
      ,[Step]
      ,[Timestamp]
      ,CAST((SELECT [Timestamp] 
             FROM [LiPimDb].[dbo].[Log_Export_Catalog] 
             WHERE [Id] = [Log].[Id]+1)-[Timestamp]AS TIME(3)) AS Duration 

FROM [LiPimDb].[dbo].[Log_Export_Catalog] AS [Log]

WHERE Func = 'SP_Create_Export_Catalog'

我是否需要获得子查询然后得到持续时间的总和?

2 个答案:

答案 0 :(得分:1)

看起来简单GROUP BY就是您所需要的:

SELECT
    Func
    ,DATEDIFF(second, MAX(Timestamp), MIN(Timestamp)) AS DurationSeconds
FROM [LiPimDb].[dbo].[Log_Export_Catalog] AS [Log]
WHERE Func = 'SP_Create_Export_Catalog'
GROUP BY Func

删除WHERE过滤器以查看每个功能的持续时间。

答案 1 :(得分:0)

从您的表格中我可以说您只需要endstart之间的差异。

由于这似乎是一个存储过程,最简单的可能是这样的:

DECLARE @startTime DATETIME=GETDATE();
...Your code here ...
DECLARE @duration TIME=CAST(GETDATE()-@startTime AS TIME);
SELECT @duration;

可以将最后一个值插入到日志表中以便于检索...