如何在左内连接中获取最新版本的模块?

How do I get latest versions of modules in my left inner join?

我正在使用 SQL 左内连接来查询 4 ​​个表。其中一个表 HtmlText 包含 ModuleIDVersion 列。我想要完成的是仅从特定站点或 PortalID 中提取每个 ModuleID 的 MAX 版本。这是我试过的

SELECT TBS.PortalID [PortalID], TBS.TabID [TabID], TBS.TabName [TabName], 
TBS.TabPath [TabPath], HTM.Version[Version], TBM.ModuleID [ModuleID],     
MDS.ModuleID[ModuleID], HTM.Content[Content]
FROM [MyDB].[dbo].[Tabs] TBS
Inner JOIN [MyDB].[dbo].[Modules] MDS 
LEFT JOIN [MyDB].[dbo].[TabModules] TBM
LEFT JOIN [MyDB].[dbo].[HtmlText] HTM 
ON HTM.[ModuleID] = TBM.[ModuleID]
ON MDS.[ModuleID] = TBM.[ModuleID]
ON TBS.[TabID] = TBM.[TabID] 
WHERE TBS.[PortalID] = '0' AND DataLength(HTM.[Content]) <> 0  
AND Version = (Select MAX([Version]) from [MyDB].[dbo].[HtmlText]) 

但这只给我最大 VersionModuleID,而不是所有不同 ModuleIDs

的 MAX 版本

在派生的 table(FROM 子句中的子查询)中使用 ROW_NUMBER() 窗口函数:

(SELECT iHTM.ModuleID,
       iHTM.Version,
       rownum = ROW_NUMBER()
                    OVER (
                        PARTITION BY iHTM.ModuleID
                        ORDER BY iHTM.Version DESC)
  FROM [MyDB].[dbo].[HtmlText] iHTM) htmVER

并且当在 ON 子句中时,请务必包含 htmVER.rownum = 1 以便您获得第一个实例(即最大版本)。

如果您只需要 HtmlText 中的 Content 列(或另一个列),则可以使用此查询。它还确保模块所在的模块或选项卡未被删除。

SELECT Modules.PortalID, TabModules.TabID, Tabs.TabName, Tabs.TabPath, Modules.ModuleID,
(SELECT TOP (1) [Content] FROM HtmlText WHERE (ModuleID = Modules.ModuleID) ORDER BY Version DESC) AS Content
FROM Modules
INNER JOIN TabModules ON TabModules.ModuleID = Modules.ModuleID
INNER JOIN Tabs ON Tabs.TabID = TabModules.TabID
WHERE (Modules.ModuleDefID = 116) AND (Modules.IsDeleted = 0) AND (Tabs.IsDeleted = 0) AND (Modules.PortalID = 0)
ORDER BY Modules.PortalID, TabModules.TabID, Modules.ModuleID

您只需要检查 ModuleDefID116 还是其他数字。这可能因 DNN 安装而异。

这可以在 ModuleDefinitions table 中找到,默认 FriendlyNameText/HTML。您可以将 ModuleDefinitions 包含在查询中并检查 FriendlyName 值,但这可能不是唯一值(尽管不太可能)

尝试将您的最后一个谓词更改为:

AND Version = (Select MAX([Version]) from [MyDB].[dbo].[HtmlText] where ModuleId = HTM.ModuleId)

这将获得该特定模块的最高版本