2010-10-14 108 views
1

我正面臨編寫一個應該很容易的sql查詢的問題,我猜想,但我無法專注於該查詢。因此從這個網站上獲得一些幫助。簡單的SQL查詢但弄糊塗

問題:我有一個表的「請求」,它具有以下列 -

CreatedOn:當我創造新的要求,CreatedOn充滿了當前日期時間

LastModifiedOn:當有人修改記錄,此字段將使用修改後的當前日期時間進行更新。默認情況下,這與第一次創建請求時的createdOn相等。

現在要檢查的邏輯是 - 最初請求狀態是「已提交」。如果請求在未來10分鐘或10分鐘內沒有修改,則請求狀態應更新爲「已取消」。現在我無法得到如何編寫這個查詢。

編輯:如果請求在任何10分鐘的間隔修改,那麼我不想更新請求取消。如果記錄在過去10分鐘內未修改,一般情況下我想更新狀態以取消。

如果需要其他詳細信息,請告知我。您可以假設還有一個唯一的RequestID列。

回答

4
update Request 
set State = 'Cancelled' 
where RequestID = @MyRequestID 
    and State = 'Submitted' 
    and LastModifiedOn < dateadd(mi, -10, getdate()) 

注:此查詢旨在通過在一個函數不使用LastModifiedOnSARGable以獲得最佳性能。

+0

是的,謝謝,我正在尋找這種類似的解決方案,我不想在函數中使用lastModifiedOn或craetedOn。讓我試着回顧一下。 – 2010-10-14 13:17:52

1
update Request 
set State='Cancelled' 
where State='Submitted' AND dateadd(mi, -10, GetDate()) < ModifiedOn 
+0

這不會檢查記錄是否被修改。如果記錄在過去10分鐘內被修改,我不希望更新狀態爲取消 – 2010-10-14 13:07:24

+0

@Sachin Shanbhag,您無法通過用ModifiedOn替換CreatedOn來修改它嗎? – tster 2010-10-14 13:56:20

+0

我認識巴迪。我沒有說你的回答是錯誤的。我試着用lastModifiedOn替換createdOn來回答,但是你是否意識到你的查詢總是會返回true,因爲你將當前日期加10,這永遠不會比lastModifiedOn或createdOn小。謝謝。 – 2010-10-14 14:12:09

1

更新請求 設置狀態= '取消',LastModifiedOn = GETDATE() 是:國家= '提交' 和DATEDIFF(分鐘,LastModifiedOn,GETDATE())> 10

1

您是否在尋找DateDiff

DATEDIFF(minute, LastModifiedOn, getdate()) > 10 
+0

謝謝,但沒有日期 – 2010-10-14 13:18:23