T-SQL返回最大字段

T-SQL返回最大字段,sql,sql-server,tsql,ssms,Sql,Sql Server,Tsql,Ssms,我有以下代码: SELECT ItemID, UserID, MAX(LogID) AS 'LatestLog' FROM Log WHERE UserID <> 0 GROUP BY ItemID, UserID` 并像这样使用它: SELECT ItemID, ItemName, UDFGetModBy(MAX(UA.LogID)) FROM ItemTable it LEFT JOIN (SELECT ItemID, UserID, MAX(LogID) AS 'Lates

我有以下代码:

SELECT ItemID, UserID, MAX(LogID) AS 'LatestLog'
FROM Log
WHERE UserID <> 0
GROUP BY ItemID, UserID`
并像这样使用它:

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
但是我有一个 如果子查询没有引入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中的数据。此处没有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

这抓住了我一直在寻找的“最新日志”一行。不确定它是否是最优的,但它现在可以工作。

最后,我想您可以在子查询中这样做:

SELECT TOP 1 * FROM ItemTable ORDER BY DESC

这抓住了我一直在寻找的“最新日志”一行。不确定它是否是最佳的,但它现在可以工作。

共享项目和日志表架构和数据。和预期的输出。我不确定您是否需要一个派生表来执行此操作。它会减慢速度,你在函数中一个接一个地执行,并将其从基于集合的状态中移除。我试图回答,但意识到我们首先需要你的表定义。@Leonidas199x这在MySql或SQL Server 2000或更早版本中是正确的,但对于具有良好统计优化器(如SQL Server 2005+)的DBMS则不正确,Oracle或DB2。@rbaryyoung有趣,你知道关于它的阅读材料吗?有兴趣了解它是如何工作的,谢谢。共享项目和日志表架构和数据。和预期的输出。我不确定您是否需要一个派生表来执行此操作。它会减慢速度,你在函数中一个接一个地执行,并将其从基于集合的状态中移除。我试图回答,但意识到我们首先需要你的表定义。@Leonidas199x这在MySql或SQL Server 2000或更早版本中是正确的,但对于具有良好统计优化器(如SQL Server 2005+)的DBMS则不正确,Oracle或DB2。@rbaryyoung有趣,你知道关于它的阅读材料吗?我有兴趣了解它是如何工作的,谢谢。
SELECT TOP 1 * FROM ItemTable ORDER BY DESC