none
VALOR MAXIMO DE UNA COLUMNA DE TIPO VARCHAR RRS feed

  • Pregunta

  • Hola tengo la siguiente consulta;

    SELECT replace(numaprob, '-','.') as numaprob FROM cobSocios 
    GROUP BY numaprob
    ORDER BY CONVERT(decimal(8,2),replace(numaprob,'-','.')) ASC

    y me devuelve lo siguiente;

    lo que necesito es, obtener el valor máximo de esta columna de datos, por lo que el valor máximo seria el 10.8, como puedo hacer para obtener este valor máximo en la consulta mostrada, no he podido solucionar esto debido a que el campo numapob es string ya que al guardar los datos se guarda 10-8 usando un guion, espero puedan ayudarme gracias.


    • Editado DaviBar jueves, 28 de febrero de 2019 13:47 cambio titulo
    jueves, 28 de febrero de 2019 13:41

Respuestas

  • Hola.

    Prueba con select top (1).....

    Y cambia el asc por desc

    • Marcado como respuesta DaviBar jueves, 28 de febrero de 2019 14:12
    jueves, 28 de febrero de 2019 13:52
  • Hola DaviBar:

    Tres posibles soluciones.

    create table cobSocios(id int identity(1,1),numaprob varchar(10))
    go
    insert into cobSocios (numaprob)
    values
    ('0-0'),
    ('3-5'),
    ('1-9'),
    ('10-8'),
    ('2-7'),
    ('4-3'),
    ('5-1'),
    ('7-8'),
    ('9-4')
    go
    /* Fin del escenario */
    
    -- Solución con top
    SELECT TOP (1) replace(numaprob, '-', '.') AS numaprob
    FROM cobSocios
    GROUP BY numaprob
    ORDER BY CONVERT(DECIMAL(8, 2), replace(numaprob, '-', '.')) DESC;
    
    -- Solucion con max
    SELECT MAX((CAST(replace(numaprob, '-', '.') AS DECIMAL(8, 2)))) AS numaprob
    FROM cobSocios; 
    -- Solucion con tabla derivada
    SELECT MAX(o.numaprob)
    FROM
    (
        SELECT CAST(replace(numaprob, '-', '.') AS DECIMAL(8, 2)) AS numaprob
        FROM cobSocios
        GROUP BY numaprob
    ) AS o;

    • Marcado como respuesta DaviBar jueves, 28 de febrero de 2019 21:10
    jueves, 28 de febrero de 2019 21:02

Todas las respuestas

  • Hola.

    Prueba con select top (1).....

    Y cambia el asc por desc

    • Marcado como respuesta DaviBar jueves, 28 de febrero de 2019 14:12
    jueves, 28 de febrero de 2019 13:52
  • Tamien puedes envolver tu conjunto de datos y recover el max

    Select max(o.numaprob) from (

    Tu select sin order by

    ) as o

    jueves, 28 de febrero de 2019 13:54
  • Muchas gracias no se me había ocurrido usar el DESC jajjaa, aunque me hubiera gustado obtener solo el máximo pero no me resulto, siempre me los muestra todos pero agradezco tu ayuda gracias
    jueves, 28 de febrero de 2019 14:12
  • Hola DaviBar:

    Tres posibles soluciones.

    create table cobSocios(id int identity(1,1),numaprob varchar(10))
    go
    insert into cobSocios (numaprob)
    values
    ('0-0'),
    ('3-5'),
    ('1-9'),
    ('10-8'),
    ('2-7'),
    ('4-3'),
    ('5-1'),
    ('7-8'),
    ('9-4')
    go
    /* Fin del escenario */
    
    -- Solución con top
    SELECT TOP (1) replace(numaprob, '-', '.') AS numaprob
    FROM cobSocios
    GROUP BY numaprob
    ORDER BY CONVERT(DECIMAL(8, 2), replace(numaprob, '-', '.')) DESC;
    
    -- Solucion con max
    SELECT MAX((CAST(replace(numaprob, '-', '.') AS DECIMAL(8, 2)))) AS numaprob
    FROM cobSocios; 
    -- Solucion con tabla derivada
    SELECT MAX(o.numaprob)
    FROM
    (
        SELECT CAST(replace(numaprob, '-', '.') AS DECIMAL(8, 2)) AS numaprob
        FROM cobSocios
        GROUP BY numaprob
    ) AS o;

    • Marcado como respuesta DaviBar jueves, 28 de febrero de 2019 21:10
    jueves, 28 de febrero de 2019 21:02
  • Muchas gracias por su tiempo, es la solución que buscaba. 
    jueves, 28 de febrero de 2019 21:11
  • De nada
    jueves, 28 de febrero de 2019 21:29