我有這樣的代碼:T-SQL返回MAX場
SELECT ItemID, UserID, MAX(LogID) AS 'LatestLog'
FROM Log
WHERE UserID <> 0
GROUP BY ItemID, UserID`
現在這個返回用戶ID爲某一個項目的最新日誌條目。我相信它會做同樣加入到另一個表有說我加盟到,像這樣的項目ID時:這個代碼會發生什麼
SELECT it.ItemID, it.ItemName, UA.UserID
FROM ItemTable it LEFT JOIN
(SELECT ItemID, UserID, MAX(LogID) AS 'LatestLog'
FROM Log
WHERE UserID <> 0
GROUP BY LogID, UserID
) AS UA
ON it.ItemID = UA.ItemID
是返回的最大LogIDs爲每個修改Item的用戶,而不僅僅是我認爲的最大LogID。我在這裏錯過了什麼?
我還創建了一個標量函數,我將輸入日誌表LogID並返回用戶ID並工作,但運行後,它減慢它非常糟糕,我假設這是由於查詢所有LogID的從初始表加入ItemID。
DECLARE @UID INT
SELECT @UID = al.UserID FROM Log al WHERE al.LogID = @theID
RETURN @UID
並使用它像這樣:
SELECT ItemID, ItemName, UDFGetModBy(MAX(UA.LogID)) FROM ItemTable it
LEFT JOIN (SELECT ItemID, UserID, MAX(LogID) AS 'LatestLog' FROM Log WHERE UserID <> 0
GROUP BY LogID, UserID) AS UA ON it.ItemID = UA.ItemID
項目表架構組成:ItemID, ItemName, CreatedDate
日誌表架構組成:LogID, ItemID (FK to Item Table), DateModified, UserID
預期的輸出應該是:it.ItemID, it.ItemName, al.UserID, al.DateModified
進一步說明:日誌表每次都會保存一個新的LogID em已被非系統用戶修改(UserID <> 0
)。
也試過:
SELECT it.ItemID, it.ItemName, UID =
(SELECT al.UserID, MAX(al.LogID) AS 'LID' FROM Log al)
WHERE al.UserID <> 0 AND it.ItemID = al.ItemID)
FROM ItemTable it
但我得到一個 only one expression can be specified in the select list when the subquery is not introduced with EXISTS
錯誤
任何建議嗎?
分享'Item'和'Log'表'Schema'和'Data'。和預期的'輸出'。 –
我不確定你需要一個派生表來做到這一點。它會減慢速度,你在函數中逐個執行它,並將它從基於設置的位置上移開。 – Leonidas199x
我試着回答,但意識到我們首先需要您的表格定義。 –