這是我服用。對於複雜的查詢,總是有多種解決方案...
首先,獲取每一個最新的日期ACCOUNTID
select AccountID, max(Date)
from Update2
group by AccountID
棒這在子查詢中,加入回表,只得到「最新」條目
select CInner.*, CMax.MaxDate
from Update2 CInner
inner join (-- Max date for every AccountID
select AccountID, max(Date) MaxDate
from Update2
group by AccountID) CMax
on CMax.AccountID = CInner.AccountID
and CMax.MaxDate = CInner.Date
將其插回到原始查詢中。 使這一切成爲一個子查詢,以保持完整外部聯接不同 (我也感動了內部聯接在一起可理解)
SELECT DISTINCT A.ID , C.Date
FROM IDTable A
INNER JOIN AccountTable B
ON B.AccountID = A.AccountID
INNER JOIN UserTable UT
ON UT.UserMnemonicID = A.AssignedTo
FULL OUTER JOIN Updates U
ON U.ID = A.ID
FULL OUTER JOIN (-- Update2, with latest date
select CInner.*, CMax.MaxDate
from Update2 CInner
inner join (-- Max date for every AccountID
select AccountID, max(Date) MaxDate
from Update2
group by AccountID) CMax
on CMax.AccountID = CInner.AccountID
and CMax.MaxDate = CInner.Date) C
ON C.AccountID = B.AccountID
WHERE A.StatusID NOT IN ('Complete','Open')
--Need help here to only return MAX date value:
AND C.Date=(SELECT MAX(C.Date) FROM Update2)
ORDER BY A.ID
這是據我可以走了。這裏的問題是所有JOIN都將在WHERE子句之前解析,所以在當前表單中,所有這些全外連接都是毫無意義的,因爲只有包含max(Date)的結果行纔會包含在內。
要提到的是,我發現全外連接的查詢非常難以正確。事實上,在查詢中有兩個讓我的眼睛流水,更重要的是它們可以「分離」核心內部連接查詢。你確定他們需要在那裏嗎?
你正在使用什麼類型的SQL引擎? – William