簡體   English   中英

T-SQL返回MAX字段

[英]T-SQL return MAX field

我有以下代碼:

SELECT ItemID, UserID, MAX(LogID) AS 'LatestLog'
FROM Log
WHERE UserID <> 0
GROUP BY ItemID, UserID`

現在,這會將UserID返回到特定項的最新日志條目。 我認為在連接到另一個具有要加入的項目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

這段代碼所發生的是,它為修改該項目的每個用戶返回了最大LogID,而不僅僅是我認為會的最大LogID。 我在這里想念什么?

我還創建了一個標量函數,可以在其中輸入日志表LogID並返回userID並可以正常工作,但是運行它之后,它的運行速度會變慢,我認為這是由於從初始表中查詢了所有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

為了進一步說明:每次由非系統UserID <> 0UserID <> 0 )修改項目時,日志表都會保存一個新的LogID。

還嘗試了:

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錯誤only one expression can be specified in the select list when the subquery is not introduced with EXISTSonly one expression can be specified in the select list when the subquery is not introduced with EXISTS

有什么建議嗎?

您需要過濾選擇中的數據。 像這樣的東西(這里沒有sql):

SELECT ItemID, ItemName, UDFGetModBy(MAX(UA.LogID)) FROM ItemTable it 
OUTER APPLY (SELECT ItemID, UserID, MAX(LogID) AS 'LatestLog' FROM Log WHERE 
UserID <> 0 and ItemID = it.ItemID GROUP BY ItemID, UserID)

使用外部應用可以過濾子查詢中的數據。

最后,我發現您可以在子查詢中以這種方式執行此操作:

SELECT TOP 1 * FROM ItemTable ORDER BY DESC

這抓住了我一直在尋找的整個“ LatestLog”行。 不知道它是否是最佳選擇,但現在可以使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM