Seleccionar el número de versión máximo de dos columnas

Esto se relaciona con otra pregunta que hice previamente. Puede comprender mejor esto si lo escanea rápidamente. Números de versión flotantes, decimales o dobles

Tengo dos columnas y un extranjero en una tabla de database. Una columna [Versión] y una columna [Revisión] . Estos están en relación con los numbers de versión. por ejemplo, la versión 1, la revisión 2 = v1.2

Lo que tengo que hacer es tomar el número máximo de versión para una key externa en particular.

Esto es lo que tengo hasta ahora:

SELECT f.[pkFileID] ,x.[fkDocumentHeaderID] ,f.[fkDocumentID] ,x.[Version] ,x.[Revision] ,f.[FileURL] ,f.[UploadedBy] ,f.[UploadedDate] FROM ( SELECT docs.[fkDocumentHeaderID] ,MAX([Version]) AS Version ,MAX([Revision]) AS Revision FROM [ClinicalGuidanceV2].[dbo].[tbl_DocumentFiles] INNER JOIN dbo.tbl_Documents docs ON [fkDocumentID] = [pkDocumentID] GROUP BY docs.[fkDocumentHeaderID] ) AS x INNER JOIN dbo.tbl_DocumentFiles f ON f.[fkDocumentHeaderID] = x.[fkDocumentHeaderID] AND f.[Version] = x.[Version] AND f.[Revision] = x.[Revision] 

Básicamente agarrando el máximo y uniéndose a sí mismo. Obviso, esto no funciona porque si tengo los numbers de versión 1.1 , 1.2 y 2.0 el valor máximo que estoy devolviendo de la consulta anterior es 2.2 (que no existe).

Lo que necesito hacer (creo) es seleccionar el máximo [Versión] y luego seleccionar el máximo [Revisión] para esa [Versión] pero no puedo entender cómo hacerlo.

Cualquier ayuda, sugerencias, preguntas son bienvenidas.

Gracias.

Podrías cambiarlo a

 SELECT f.[pkFileID] ,x.[fkDocumentHeaderID] ,f.[fkDocumentID] ,x.[Version] ,x.[Revision] ,f.[FileURL] ,f.[UploadedBy] ,f.[UploadedDate] FROM ( SELECT docs.[fkDocumentHeaderID] ,MAX([Version] * 100000 + [Revision]) AS [VersionRevision] FROM [ClinicalGuidanceV2].[dbo].[tbl_DocumentFiles] INNER JOIN dbo.tbl_Documents docs ON [fkDocumentID] = [pkDocumentID] GROUP BY docs.[fkDocumentHeaderID] )AS x INNER JOIN dbo.tbl_DocumentFiles f ON f.[fkDocumentHeaderID] = x.[fkDocumentHeaderID] AND f.[Version] * 100000 + f.[Revision] = x.[VersionRevision] 

La idea es multiplicar la Versión con una constante lo suficientemente grande para que nunca colisione con la revisión (he tomado 100.000 pero cualquier valor lo haría).

Después de eso, su JOIN hace lo mismo para recuperar el logging.

Lo siguiente debería funcionar para extraer la revisión superior.

 SELECT TOP 1 f.[pkFileID] ,x.[fkDocumentHeaderID] ,f.[fkDocumentID] ,x.[Version] ,x.[Revision] ,f.[FileURL] ,f.[UploadedBy] ,f.[UploadedDate] FROM ( SELECT docs.[fkDocumentHeaderID] ,MAX([Version]) AS Version -- Comment this out ,MAX([Revision]) AS Revision FROM [ClinicalGuidanceV2].[dbo].[tbl_DocumentFiles] INNER JOIN dbo.tbl_Documents docs ON [fkDocumentID] = [pkDocumentID] GROUP BY docs.[fkDocumentHeaderID] ) AS x INNER JOIN dbo.tbl_DocumentFiles f ON f.[fkDocumentHeaderID] = x.[fkDocumentHeaderID] AND f.[Version] = x.[Version] ORDER BY x.Revision DESC 

A saber, extrae solo los loggings que usan la versión máxima en la tabla x. Luego ordera estos loggings por revisión en order descendente, y extrae el más alto del grupo.