2017-06-03 185 views
1

我有一張表,其中包含有關他們一整天都在做什麼的信息。我需要獲得每個任務的開始時間/結束時間。將時間列拆分爲開始時間/結束時間列

目前我能夠拉每個任務的時間戳,但我希望創建開始時間和結束時間列。開始時間將是前一行的時間戳,結束時間將是當前行的時間戳。

有沒有簡單的方法來做到這一點?這是我目前使用的查詢。

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

什麼版本的SQL Server? – RBarryYoung

回答

0

您可能需要使用SQL CTE選項,查找該鏈接上一些幫助,SQL Find difference between previous and current row

我的建議是保持單條記錄的活動,如果你的第一個記錄是開始,接下來是結束那個任務。

如果您不想更改模式,則可以添加一個描述任務類型列的列,它是開始或結束。它將在未來的查詢中幫助你。

+0

謝謝,cte選項正是我所需要的。 –

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 
相關問題