Ver Mensaje Individual
  #4 (permalink)  
Antiguo 07/06/2009, 10:20
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 3 meses
Puntos: 2658
Respuesta: Dudas con sentencia MAX

A que está usando un campo VARCHAR, en lugar un campo numérico.
Es en definitiva un problema de cómo implementaste el modelo. Has querido darle una característica mnemotécnica a la clave, pero sin considerar que para incorporar un valor numérico incremental a un string, a fin de que este mantenga un buen ordenamiento, debes "spanear" los caracteres que serán usados para el número.
Me explico:
Has creado una clave que comienza con "DEXAM" (técnicamente innecesario), que se ordena alfabéticamente, a la que le adicionas el numero de examen, pero sin considerar que al hacerlo los dígitos pasan a ser caracteres, y por tanto se ordenan como tales.
Esto hace que el orden comience:
Cita:
DEXAM1
DEXAM2
DEXAM3
DEXAM4
DEXAM5
DEXAM6
DEXAM7
DEXAM8
DEXAM9
El problema es que DEXAM10, al ordenarse como caracteres no le corresponde la posicion final, sino entre DEXAM1 y DEXAM2, ya que comienza igual que DEXAM1 pero su valor como caracteres es superior (tiene un caracter más), pero inferior a DEXAM2 (el valor ASCII de "1" es inferior al de "2" .
Para resolver este tipo de problemas lo que se suele hacer es crear un patrón de dígitos que se adicionará a "DEXAM", rellenandolo con ceros y usandolo para poner el número:
Cita:
DEXAM00001
DEXAM00002
DEXAM00003
DEXAM00004
DEXAM00005
DEXAM00006
DEXAM00007
DEXAM00008
DEXAM00009
DEXAM00010
DEXAM00011
...
En principio, el problema es que el ID que está usando es ineficiente (requiere más ancho de campo que uno numérico), y además complica las búsquedas a futuro. Si tu problema es que usas la misma tabla para almacenar diferentes tipos de examen, entonces el planteo está mal pensado de inicio, porque eso se aleja de un modelo E-R bien diseñado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)