SQL - Filtro numero mas grande

 
Vista:
sin imagen de perfil

Filtro numero mas grande

Publicado por Salva (4 intervenciones) el 30/04/2018 09:11:07
Buenos días;

He realizado esta consulta para filtrar el numero más grande a partir de un campo concreto.

Select MAX (CODIGO) from dbo.E_TROQUE
where EXTCAR2 = 'DIGICON' ;

La consulta es si puedo a demás de esto si se puede filtrar el mas grande a partir de un numero concreto del campo (CODIGO).

Quedo a la espera de vuestra ayuda.

Saludos;
SALVA
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Filtro numero mas grande

Publicado por leonardo_josue (1173 intervenciones) el 30/04/2018 15:48:35
Hola Salva:

No me queda claro a qué te refieres con filtrar el más grande a partir de un código... postea por favor la estructura de tu tabla y pon algunos datos de ejemplo. A partir de esos datos dinos qué es lo que esperas obtener como salida y con gusto tratamos de ayudarte con la consulta.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Filtro numero mas grande

Publicado por Salva (4 intervenciones) el 30/04/2018 21:36:34
Ejemplo:

Tengo estos datos:

CODIGO EXTCAR2
1345 MIDA
4565 MIDA
7655 MIDA
13000 DIGICON
13001 DIGICON
13005 DIGICON

El problema es que alguna de las entradas del campo COGIGO han sido importadas de un programa antiguo y están como campo de texto y no como campo de numero y me filtra antes campos mas pequeños de los que realmente son su los detectara como números y suelen ser campos antiguos ya que las nuevas entradas ya son números y quiero empezar a filtrar el numero mas grande a partir de un numero concreto.

No se si me he explicado bien!
Gracias.
SALVA
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Filtro numero mas grande

Publicado por leonardo_josue (1173 intervenciones) el 30/04/2018 22:20:56
Hola de nuevo Salva:

vayamos por partes en tu problema... primero nos dices esto:

1
2
El problema es que alguna de las entradas del campo COGIGO han sido importadas de un programa antiguo y
están como campo de texto y no como campo de numero

Esto es imposible en Base de Datos, ya que ningún DBMS puede "mezclar" tipos de datos en una columna, entonces, no es posible que digas que algunas entradas son numéricas y otras tipo texto. Sin embargo sí puedes tener un problema con la función MAX si tratas de aplicarla sobre un campo tipo texto. Entonces, antes que nada dinos, ¿cómo tienes definido tu campo CÓDIGO en tu tabla? si la tienes definida como NUMÉRICA (sea entera, real, flotante, decimal o cualquier otro) entonces el "error" no tiene que ver con el tipo de dato, sino con otra cuestión.

Si tu campo lo tienes definido como VARCHAR (o cualquier tipo que no sea NÚMERO) entonces ese es justamente el problema... Si es el caso, entonces lo que tienes que hace es CONVERTIR tu campo primero a un tipo NUMÉRICO y después aplicar la función MAX. No nos dices con qué motor de BD's estás trabajando pero puedo suponer que se trata de SQL Server, entonces sería algo así:

https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-2017

1
2
3
SELECT MAX (CAST(codigo AS INT))
FROM dbo.E_TROQUE
WHERE extcar2 = 'DIGICON' ;

1
2
3
SELECT MAX (CONVERT(INT, codigo))
FROM dbo.E_TROQUE
WHERE extcar2 = 'DIGICON' ;

En este caso, también debes de asegurarte que el contenido del campo SEAN SOLO NUMEROS, ya que de lo contrario la función CAST marcará un error. Puedes usar la función ISNUMERIC para validar antes de convertir:

https://docs.microsoft.com/en-us/sql/t-sql/functions/isnumeric-transact-sql?view=sql-server-2017

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Filtro numero mas grande

Publicado por Salva (4 intervenciones) el 01/05/2018 07:50:37
Buenos días;
El campo COGIDO está definido como (nvarchar(15), NULL)

Te mando un pantallazo y como veras está ordenado de mayor a menor por el campo CODIGO pero en cambio tengo valores mas pequeños antes los valores de 41003 que son mayores, es por eso que queria filtrar el valor mas grande a partir de un número concreto que le indicara.

Gracias por tu tiempo.
SALVA

Captura-de-pantalla-2018-05-01-a-las-7.41.16
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Filtro numero mas grande

Publicado por leonardo_josue (1173 intervenciones) el 02/05/2018 18:24:24
Hola de nuevo:

1
2
Te mando un pantallazo y como veras está ordenado de mayor a menor por el campo CODIGO pero en cambio tengo
valores mas pequeños antes los valores de 41003 que son mayores

El problema como te dije en mi post anterior es que tienes definido el campo como un TEXTO (nvarchar) y no es lo mismo ordenar CADENAS que ordenar NÚMEROS... entonces no es lo mismo '10' que 10.

Para ti puede resultar claro que en tu columna estás almacenando sólo números, pero en ese sentido un DBMS no es adivino y por lo tanto, ordena las cadenas ALFABÉTICAMENTE... entonces en este caso los "números" también los ordena "alfabéticamente" en base a su código ASCII, checa este ejemplo:

En este caso la tabla tiene dos campos, uno de tipo texto, otro de tipo numero con aparentemente la misma información,

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SELECT * FROM tabla;
+-------------+--------------+
| campo_texto | campo_numero |
+-------------+--------------+
| 1           |            1 |
| 2           |            2 |
| 10          |           10 |
| 100         |          100 |
| 212         |          212 |
| 3           |            3 |
| 2345        |         2345 |
+-------------+--------------+
7 rows in set (0.00 sec)

Pero observa cómo se comportan los datos cuando ordenas por cada campo:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SELECT * FROM tabla ORDER BY campo_texto;
+-------------+--------------+
| campo_texto | campo_numero |
+-------------+--------------+
| 1           |            1 |
| 10          |           10 |
| 100         |          100 |
| 2           |            2 |
| 212         |          212 |
| 2345        |         2345 |
| 3           |            3 |
+-------------+--------------+
7 rows in set (0.00 sec)

Aquí la ordenación es ALFABÉTICA, por lo tanto 10 y 100 "alfabéticamente" están antes que 2 o 212 o 2345, ya que en código ASCII del número 1 está antes que el código ASCII del código 2,

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SELECT * FROM tabla ORDER BY campo_numero;
+-------------+--------------+
| campo_texto | campo_numero |
+-------------+--------------+
| 1           |            1 |
| 2           |            2 |
| 3           |            3 |
| 10          |           10 |
| 100         |          100 |
| 212         |          212 |
| 2345        |         2345 |
+-------------+--------------+
7 rows in set (0.00 sec)

Aquí la ordenación se hace NUMERICAMENTE, que es como lo quieres hacer tú.

Entonces vuelvo a lo mismo que puse en mi post anterior, SI QUIERES QUE TU COLUMNA SE COMPORTE COMO NUMÉRICA ENTONCES TIENES QUE HACER LA CONVERSIÓN A NÚMERO para este ejemplo en MySQL sería así:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SELECT * FROM tabla ORDER BY cast(campo_texto AS UNSIGNED);
+-------------+--------------+
| campo_texto | campo_numero |
+-------------+--------------+
| 1           |            1 |
| 2           |            2 |
| 3           |            3 |
| 10          |           10 |
| 100         |          100 |
| 212         |          212 |
| 2345        |         2345 |
+-------------+--------------+
7 rows in set (0.05 sec)

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Filtro numero mas grande

Publicado por Salvador (4 intervenciones) el 06/05/2018 10:37:35
Buenos días;
Gracias Leo por tus aclaraciones voy a ver si puedo hacer el cambio siguiendo tus instrucciones.
Muy agradecido!!
SALVA
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar