Código MySQL:
El problema es que devuelve 0 y no sé porqué. ¿Alguien me puede echar una mano? Gracias. Ver original
end while; RETURN resultado;
| |||
![]() Hola, tengo una función que se supone que calcula la mayor diferencia entre dos fechas de registros consecutivos, es decir, compara la fecha del registro 2 con la del 1, 3 con 2, 4 con 3, etc. El código es:
Código MySQL:
El problema es que devuelve 0 y no sé porqué. ¿Alguien me puede echar una mano? Gracias. Ver original Última edición por gnzsoloyo; 13/07/2016 a las 08:01 |
| ||||
Respuesta: Error en función MySql Cita: Mas alla de crear o no una SF, lo que quieres hacer es algo como:
Código MySQL:
Ver original Nota: Estoy reconstruyendo de memoria algo que hice hace años, no aseguro que funcione de entrada porque no tengo tus datos para probarlo. Ahora bien, ten muy presente que el mínimo puede devolverte cero si hay dos registros que tengan la misma fecha... ¿Esto lo tuviste en cuenta? Para excluir esos casos debería ser:
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| |||
Respuesta: Error en función MySql Hola libras, resta es el resultado de convertir a entero dif, SELECT DATEDIFF(time_max,time_min) INTO dif; resultado tomará el valor de resta siempre que éste sea > 0 |
| ||||
Respuesta: Error en función MySql Sintaxis de mysql, muy diferente a la de SQL server :S
__________________ What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me |
| |||
![]() hola gnzsoloyo, me ha parecido buena idea tu solución y la he adaptado a mi función con resultado idéntico: 0
Código MySQL:
¿Cual es el error?, pues si hago: en una consulta normal a la Bd, sí lo hace bien. No lo entiendo!!!! Ver original Última edición por gnzsoloyo; 13/07/2016 a las 11:30 |
| ||||
Respuesta: Error en función MySql Empecemos por el principio: ¿Hiciste la prueba primero con la query tal y como te la propuse, sin modificarla? ¿Devolvió algo? Es decir, sólo así:
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| |||
![]() Hola, no, la hice así:
Código:
Lo del 95 y 94 son valores del índice, podrían haber sido cualesquiera consecutivos.SELECT MAX(DATEDIFF((select fecha from datos where salida_num = 95), (select fecha from datos where salida_num = 94))) FROM datos; Así, probado en una consulta SQL a la Bd no hay problema, el problema está al meterlo en la función. |
| ||||
Respuesta: Error en función MySql No me interesa como la hiciste, necesito que la pruebes tal y como está. La adaptacion que estás haciendo no es ni eficiente ni correcta. Haz la prueba y dime qué devuelve. Luego te muestro cómo meter eso en la SF que estás creando, porque lo que haces es complicarte la vida.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Error en función MySql Esta pensando como desarrollador de manera secuencial y no como se piensa en una base de datos en un dataset ;)
__________________ What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me |
| ||||
Respuesta: Error en función MySql Seguro, está pensando como programador, y eso no está bien. Bueno, ejemplificando, lo que quisiera que haga es esto:
Código MySQL:
Ver original Donde si quiero la mayor diferencia entre dos fechas, sería:
Código MySQL:
Ver original Claro que para que esta lógica funcione, no tiene que haber saltos en la numeración de la PK... dado que si los hay no devolverá datos allí.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| |||
Respuesta: Error en función MySql Hola de nuevo, sí funciona
Código:
Voy a intentar introducirlo en mi función. Ya te digo algo. SELECT MAX(DATEDIFF(dt1.fecha, dt2.fecha)) maximo FROM datos dt1 INNER JOIN datos dt2 ON dt1.salida_num = dt2.salida_num + 1 |
| |||
![]() Hola, ya lo he implementado en la función y sigue devolviendo 0. La función queda:
Código MySQL:
La tabla datos es:Ver original
Código MySQL:
el insert es:Ver original
Código MySQL:
Creo que con esto ya puedes tener mejor idea de lo que tengo, ya te digo, al ejecutar la función devuelve 0Ver original ![]() Última edición por gnzsoloyo; 13/07/2016 a las 15:30 |
| ||||
Respuesta: Error en función MySql Mira, con la query que te indiqué, tu stored function se reduce a esto:
Código MySQL:
Luego, la ejecución es simplemente:Ver original
Código MySQL:
Ver original ¿Se va entendiendo? Todo lo que codificaste, debido a que estás pensando como programador de aplicaciones, no es correcto para obtener un resultado en SQL. Las soluciones de programacion no sirven usualmente en BBDD.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Error en función MySql Cita: ![]() ![]() ![]() ![]() ![]() Muy buen comentario, es lo comun despues de aprender a programar todo verlo con la misma logica, pero en bases de datos no se aplica la misma revisa este link que explica como quitar cursores o ciclos usando queries: https://blogs.msdn.microsoft.com/sql...et-operations/
__________________ What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me |
| |||
![]() Muchas gracias!!, por vuestra ayuda en bases de datos voy un poco justo e intento aplicar la lógica de la programación de aplicaciones en la de BBdd, algunas veces funciona pero la mayoría de veces no. Repito, muchas gracias por vuestra ayuda ![]() |
Etiquetas: |