我有一张表格,其中包含有关他们一整天所做的事情的信息。我需要获得每项任务的开始时间/结束时间。
目前我能够提取每项任务的时间戳,但我希望创建“开始时间”和“结束时间”列。开始时间是前一行的时间戳,结束时间是当前行的时间戳。
有没有简单的方法可以做到这一点?这是我目前使用的查询。
select
Timestamp,
Sku,
Station,
Username,
ActionType
from OverallLogs
where
and ActionType = 'Put'
and Username = 'Name'
and timestamp < DateAdd(Day, DateDiff(Day, 0, GetDate())+1, 0)
AND timestamp >= DateAdd(Day, DateDiff(Day, 0, GetDate()), 0)
Order by timestamp desc
答案 0 :(得分:0)
你可能想使用sql cte选项,在链接上寻求一些帮助,SQL Find difference between previous and current row
我的建议是保留活动的单一记录,如果您的第一条记录是开始,接下来是该任务的结束。
如果您不想更改架构,则可以再添加一列描述任务类型列的列,它是开始或结束。它将来会帮助您进行查询。
答案 1 :(得分:0)
如果要获取最后一行的值,可以使用LAG函数。 实施例
;WITH sampledata(ID, t) AS(
SELECT 1 ,DATEADD(HOUR,-12,GETDATE()) UNION
SELECT 2 ,DATEADD(HOUR,-8,GETDATE()) UNION
SELECT 3 ,DATEADD(HOUR,-4,GETDATE()) UNION
SELECT 4 ,DATEADD(HOUR,-2,GETDATE()) UNION
SELECT 5 ,DATEADD(HOUR,-1,GETDATE())
)
SELECT *,LAG(t)OVER(ORDER BY t ) AS start_t FROM sampledata
ID t start_t ----------- ----------------------- ----------------------- 1 2017-06-03 06:48:59.447 NULL 2 2017-06-03 10:48:59.447 2017-06-03 06:48:59.447 3 2017-06-03 14:48:59.447 2017-06-03 10:48:59.447 4 2017-06-03 16:48:59.447 2017-06-03 14:48:59.447 5 2017-06-03 17:48:59.447 2017-06-03 16:48:59.447