Boa tarde,
preciso fazer uma query SQL leve, que obtenha o maior numero das colunas 1 a 5 e retorne a respectiva data além do maior valor...
Tenho o seguinte banco de dados:
tabela:
data | coluna1 | coluna2 | coluna3 | coluna4 | coluna5 |
2023-04-01 | 1 | 2 | 88 | 9 | 5 |
2023-03-02 | 20 | 11 | 85 | 1 | 55 |
2023-05-14 | 12 | 31 | 8 | 2 | 12 |
2023-01-04 | 14 | 54 | 4 | 45 | 46 |
2023-03-15 | 5 | 45 | 55 | 3 | 75 |
Retorno experado:
coluna1 = 2023-03-02 | 20
coluna2 = 2023-01-04 | 54
coluna3 = 2023-04-01 | 88
coluna4 = 2023-01-04 | 45
coluna5 = 2023-03-15 | 75
Opa Fernando tudo bem?
Não acho que teremos muita dificuldades em encontrar uma solução para uma query otimizada e performática. Me chama no meu perfil que podemos fazer isso juntos. Abraços.
SELECT data
, GREATEST(coluna1, coluna2, coluna3, coluna4, coluna5) AS maior_valor
FROM tabela
WHERE GREATEST(coluna1, coluna2, coluna3, coluna4, coluna5) = ( SELECT MAX(maior_valor)
FROM ( SELECT GREATEST(coluna1, coluna2, coluna3, coluna4, coluna5) AS maior_valor FROM tabela ) AS subquery );
tanquilo fazer isso, so acionar-me
select (nome das colunas separado por virgula) order by (campo data)
SELECT
'coluna1' AS coluna,
data,
GREATEST(coluna1, coluna2, coluna3, coluna4, coluna5) AS maior_valor
FROM tabela
ORDER BY maior_valor DESC
LIMIT 1
UNION
SELECT
'coluna2' AS coluna,
data,
GREATEST(coluna1, coluna2, coluna3, coluna4, coluna5) AS maior_valor
FROM tabela
ORDER BY maior_valor DESC
LIMIT 1
UNION
SELECT
'coluna3' AS coluna,
data,
GREATEST(coluna1, coluna2, coluna3, coluna4, coluna5) AS maior_valor
FROM tabela
ORDER BY maior_valor DESC
LIMIT 1
UNION
SELECT
'coluna4' AS coluna,
data,
GREATEST(coluna1, coluna2, coluna3, coluna4, coluna5) AS maior_valor
FROM tabela
ORDER BY maior_valor DESC
LIMIT 1
UNION
SELECT
'coluna5' AS coluna,
data,
GREATEST(coluna1, coluna2, coluna3, coluna4, coluna5) AS maior_valor
FROM tabela
ORDER BY maior_valor DESC
LIMIT 1;