Hola lectores,
¡Buenas noches!
En esta publicación, demostraré rápidamente cómo recuperar el valor más grande entre varias columnas en una tabla de SQL Server. He visto varias soluciones para esta necesidad, pero ¿estás utilizando la de mayor rendimiento entre ellas?
Generando una masa de pruebas.
Para facilitar la visualización de los resultados, creemos algunos datos de prueba:
IF ( OBJECT_ID('tempdb..##Teste') IS NOT NULL ) DROP TABLE ##Teste
CREATE TABLE ##Teste (
ID INT IDENTITY(1, 1) PRIMARY KEY,
Nome NVARCHAR(40),
Data1 DATETIME,
Data2 DATETIME,
Data3 DATETIME
)
DECLARE
@Dt_Inicial DATETIME = '1900-01-01',
@Dt_Final DATETIME = '2099-04-02',
@Contador INT = 1
WHILE(@Dt_Inicial <= @Dt_Final)
BEGIN
INSERT INTO ##Teste ( Nome, Data1, Data2, Data3 )
SELECT
'Teste ' + CAST(@Contador AS VARCHAR(20)),
@Dt_Inicial,
DATEADD(DAY, ABS(CHECKSUM(NEWID()) % 5000) - ABS(CHECKSUM(NEWID()) % 5000), GETDATE()),
DATEADD(DAY, ABS(CHECKSUM(NEWID()) % 5000) - ABS(CHECKSUM(NEWID()) % 5000), GETDATE())
SET @Dt_Inicial = DATEADD(DAY, 1, @Dt_Inicial)
SET @Contador = @Contador + 1
END
SELECT * FROM ##Teste
Datos originales:

Resultado esperado:

Solución 1: usar VALORES
SELECT
ID,
(
SELECT MAX(UltimoAcesso)
FROM (VALUES (Data1),(Data2),(Data3)) AS UltimoAcesso(UltimoAcesso)
) AS UltimoAcesso
FROM
##Teste
Solución 2: uso de UNPIVOT
SELECT
ID,
MAX(UltimoAcesso) AS UltimoAcesso
FROM
##Teste
UNPIVOT ( UltimoAcesso FOR DateVal IN ( Data1, Data2, Data3 ) ) AS u
GROUP BY
ID,
Nome
Solución 3 – Usando UNION
SELECT
ID,
MAX(UltimoAcesso) AS UltimoAcesso
FROM
(
SELECT ID, Data1 AS UltimoAcesso
FROM ##Teste
UNION
SELECT ID, Data2 AS UltimoAcesso
FROM ##Teste
UNION
SELECT ID, Data3 AS UltimoAcesso
FROM ##Teste
) ud
GROUP BY
ID
Prueba de rendimiento
Luego de comprender las 3 soluciones propuestas anteriormente, probaremos el rendimiento para identificar cuál se ejecuta con el menor tiempo y costo posible. De esta manera podremos decir cuál debería ser la mejor solución adoptada para esta situación:
Solución 1

Solución 2:

Solución 3:

Resultado final:

Como podemos ver, la solución 1, además de ser muy pequeña, es la de mayor rendimiento.
¡Gracias por visitarnos!
Valor más grande del servidor SQL de varias columnas en una consulta de vista de tabla Encuentre el valor MÁXIMO de varias columnas en una tabla de SQL Server
Valor más grande del servidor SQL de varias columnas en una consulta de vista de tabla Encuentre el valor MÁXIMO de varias columnas en una tabla de SQL Server
Comentários (0)
Carregando comentários…