我想出了一個我很滿意的答案,但這有點不合適,如果提供了一個更優雅的答案,我會非常樂意接受更優雅的答案。另外,我還沒有徹底地測試過,因爲它在一天晚了,但如果我的邏輯有缺陷,我會很樂意修改或接受修改的答案。
基本上,我只是要確定一個工作日的星期幾是四小時前開始的那一天。這意味着,一直到凌晨3:59,「今天」將在前一天被考慮,這對於這些小時的操作是正確的(我超過了上午3點的關閉時間,以說明一個站點決定保持打開狀態一會兒)。然後,我使用相同的規則將這段時間與最近一次獎金應用於該客戶的帳戶的時間進行比較。如果兩者匹配,獎金將在這個營業日應用。如果它們不同,則它不具有,並且客戶有資格。
DECLARE @CustID AS int
DECLARE @LastBonus AS date
DECLARE @BonusDue AS bit
SET @LastBonus = (SELECT TOP 1 [DateTime] FROM Audit WHERE CustomerID = @CustID AND TransactionType = 'BONUS' ORDER BY [DateTime] DESC)
IF (SELECT DATEADD(hh, -4, CURRENT_TIMESTAMP)) <>
(SELECT DATEADD(hh, -4, @LastBonus))
BEGIN
SET @BonusDue = 1
END
ELSE
BEGIN
SET @BonusDue = 0
END
如果我把這個存儲過程,我可以簡單地扔在一個客戶ID,並把它吐了一下那會告訴我1如果客戶符合條件,否則爲0。我不喜歡它的是,如果客戶的營業時間早得多,我就會陷入沉寂(我估計在上午7點左右,僅僅減去四個小時就會重疊到前一個營業日,但減去不足以達到前一個營業日)。所以它暫時會奏效,但我很想看到更好的解決方案。
這樣,如果您昨天晚上11點和今天晚上9點買了一件物品,您將拒絕客戶的折扣。 – blubb 2011-05-03 15:26:53
@Simon Stelling,請看最新的編輯版本 – dawebber 2011-05-03 15:40:23