Mi consulta lo único que hace es ordenar por el campo CAMBIA pero forzando que cuando este sea nulo aparezca al final de la ordenación, se convierte el nulo en 1 y el no nulo en 0 con lo que consigues que los nulos aparezcan después de los no nulos....
If(TuTabla.cambia IS NULL,1,0)
con los datos de ejemplo da exactamente lo que pides....
Con mas datos seguramente no obtendrás lo que buscas, la respuesta quizás fue demasiado rápida, funcionaria si como en el ejemplo tenemos la "vida" de un solo parte.
DESCRIPCION NPARTE CAMBIA
RODAMIENTO 30-62699 30-20839
RODAMIENTO 30-20839 30-20839T
RODAMIENTO 30-20839T
RODAMIENTO 30-62700 30-20840
RODAMIENTO 30-20840
NPARTE CAMBIA
30-62699 30-20839
30-20839 30-20839T
30-62700 30-20840
30-20840
30-20839T
Introduciendo mas datos no da lo esperado...
La solución de jurena si la desarrollas hasta los 10 posibles cambios te dará lo que buscas en un registro (no en columna, eso seria un problema menor) pero solo para un parte dado, no para la tabla entera... y si el máximo de 10 cambios es un máximo aproximado, es decir que rara vez se superen los 10 cambios esa rara vez no te dará lo que buscas...
Sin haber dado muchas vueltas al tema y con el diseño que tienes, la de jurena, es quizás la única solución, desarrollada hasta los 10 cambios y indexando los campos nparte y cambia por separado o juntos en un índice compuesto.... habría que ver como responde... recuerda que puedes forzar el uso de índices
12.2.8.2. Index Hint Syntax
Código MySQL:
Ver originalSELECT t1.NPARTE
, t2.NPARTE
, t3.NPARTE
, t4.NPARTE
, t5.NPARTE
, t6.NPARTE
, t7.NPARTE
, t8.NPARTE
, t9.NPARTE
, t10.NPARTE
WHERE (((t1.NPARTE
)="30-62699"));
t1.NPARTE t2.NPARTE t3.NPARTE t4.NPARTE t5.NPARTE t6.NPARTE t7.NPARTE t8.NPARTE...
30-62699 30-20839 30-20839T
Si eliminas el WHERE para obtener toda la tabla daria esto
t1.NPARTE t2.NPARTE t3.NPARTE t4.NPARTE t5.NPARTE t6.NPARTE t7.NPARTE t8.NPARTE...
30-62699 30-20839 30-20839T
30-20839 30-20839T
30-20839T
30-62700 30-20840
30-20840
Suerte
Quim