簡體   English   中英

SQL Server 2008中的“更新”列

[英]Update column in SQL Server 2008

在下表中,我想基於比較下一個記錄時間和當前記錄時間之間的差異來更新BreakTime。

在此處輸入圖片說明

我已經嘗試過以下查詢:

update Machine_Data 
set BreakTime = (select DATEDIFF(SECOND, M2.Time, M1.Time) as BreakTime 
                 from Machine_Data M1 
                 join Machine_Data M2 on M1.DocEntry = M2.DocEntry + 1) 

卻拋出一個錯誤

子查詢返回的值超過1。 當子查詢遵循=,!=,<,<=,>,> =或將子查詢用作表達式時,不允許這樣做。

由於表中有行號,因此您可以在UPDATE期間自行加入以適當地排列時間。 請注意,連接條件是當前DocEntry應該與其在連接表中的一個匹配。

UPDATE t1
SET BreakTime = DATEDIFF(SECOND, t1.Time, COALESCE(t2.Time, t1.Time))
FROM Machine_Data t1
INNER JOIN Machine_Data t2
    ON t1.DocEntry = t2.DocEntry - 1

另一個要注意的是,對COALESECE()的調用將處理表中最后一條記錄的邊緣情況(按DocEntry升序排序)。 在這種情況下,它不會與任何記錄匹配,因此在這種情況下,我選擇報告零休息時間。

如果BreakTime列是Time類型,則可以使用DATEADD()設置時間:

SET BreakTime = DATEADD(SECOND,
                        DATEDIFF(SECOND, t1.Time, COALESCE(t2.Time, t1.Time)),
                        '00:00:00')
update Machine_Data
set BreakTime = (select MAX(DATEDIFF(SECOND,M2.Time,M1.Time)) as BreakTime
                 from Machine_Data M1 join Machine_Data M2 on M1.DocEntry =M2.DocEntry+1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM