我有一個歷史記錄表,它捕獲某個對象的更新,並且除了其他信息外,還捕獲此更新發生的時間。我想要做的是SELECT
MIN(LogDate)
對應於某個ActionTaken
列。在SQL Server中選擇一組日期
更具體地,歷史表可能有其他(最近)行,其中ActionTaken = 1
,但我想捕捉的日期ActionTaken
成爲 1.
例子:
SELECT MIN(LogDate) AS FirstActionDate
FROM HistoryTable
WHERE ID = 123
AND FirstActionTaken = 1
SELECT MIN(LogDate) AS SecondActionDate
FROM HistoryTable
WHERE ID = 123
AND SecondActionTaken = 1
SELECT MIN(LogDate) AS ThirdActionDate
FROM HistoryTable
WHERE ID = 123
AND ThirdActionTaken = 1
這種運作良好,並且我收到正確的日期沒有問題。當我遇到麻煩,然後將從此組select
的MAX(LogDate)
:
SELECT MAX(LogDate) AS LastActionDate
FROM HistoryTable
WHERE ID = 123
AND LogDate IN
(
( SELECT MIN(LogDate) AS FirstActionDate
FROM HistoryTable
WHERE ID = 123
AND FirstActionTaken = 1 ),
( SELECT MIN(LogDate) AS SecondActionDate
FROM HistoryTable
WHERE ID = 123
AND SecondActionTaken = 1 ),
( SELECT MIN(LogDate) AS ThirdActionDate
FROM HistoryTable
WHERE ID = 123
AND ThirdActionTaken = 1 )
)
這也適用,但我討厭做這種方式。我可以將之前的語句存入變量,並且只需從SELECT MAX()
開始;它肯定會更具可讀性,但是對於這個查詢來說,JOIN
語法是什麼樣的?
是否有辦法將前三個SELECT
語句合併爲一個返回所有三個日期並且不是不可讀的亂碼?
我怎麼能搶最近LogDate
(作爲一個單獨的列)從這個結果集並沒有(看似不必要的)重複SELECT
報表?
編輯:
這裏有幾個環節,我在有關發現已到目前爲止給出的答案:
何這些將幫助其他人尋找類似問題的解決方案!
使用一個聯盟,然後你可以使用IN – JamieD77