下面的列表的情況是:SQL服務器 - 選擇最新記錄產生變化
我的「票」一個數據庫,我們跟蹤每個它們保存時間更改門票。我專門找在狀態發生變化,這與以下格式跟蹤:
狀態:{FROM}:{TO}
與{FROM}和{TO}更改爲相應的狀態。我需要做的是在任何給定的一週結束時,例如在過去的12周內,按照「開放」(意味着處於草稿狀態)的票數週數來生成數字。但是,您並不僅限於「關閉」票證,然後重新打開它,或者在一週內進行多次更改。
所以,我需要做的是修改下面的SQL,只考慮任何給定條目的最新「動作」。這樣我們就避免了由於已經打開計數而出現「已關閉」的條目,因爲它們已經提前打開。
SELECT track.historyID
FROM RS_HistoryTracker track
WHERE (track.action = 'STATUS:INITIAL:DRAFT'
OR track.action = 'STATUS:DELETED:DRAFT'
OR track.action = 'STATUS:DRAFT:DRAFT')
AND track.trackDateTime <= @endOfWeek
不過,這一說法被包含在另一個SELECT語句中,並且被用來產生的歷史項目的完整列表:
SELECT COUNT(DISTINCT his.historyID) AS theCount
FROM RS_History his
WHERE his.historyID IN
(SELECT track.historyID
FROM RS_HistoryTracker track
WHERE (track.action = 'STATUS:INITIAL:DRAFT'
OR track.action = 'STATUS:DELETED:DRAFT'
OR track.action = 'STATUS:DRAFT:DRAFT')
AND track.trackDateTime <= @endOfWeek)
那麼,如何使只有內部的選擇考慮到最近追蹤到達或在endOfWeek日期的'行動'? HistoryTracker包含日期時間戳記列。
我認爲你在表軌中有一個票證ID字段。所以基本上你想加入一個結果集,其中包含每個票據ID的最大歷史記錄ID。 – pjp 2009-08-06 15:41:00
是的,我們確實跟蹤軌道表中的車票ID – Ipster 2009-08-06 15:44:03
至於最大歷史ID,情況可能並非如此。如果我在3個月前運行一個星期的查詢,則需要最新的歷史記錄,直至包括該周的結束日期,而忽略該周後發生的所有歷史記錄。 – Ipster 2009-08-06 15:46:46