Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Consulta MYSQL a un campo texto que tiene fechas

Estas en el tema de Consulta MYSQL a un campo texto que tiene fechas en el foro de Mysql en Foros del Web. Vengo del foro PHP que me han aconsejado que deje la duda en este foro. Bueno, quizás me daréis otra opción y estoy abierto a ...
  #1 (permalink)  
Antiguo 06/02/2015, 06:08
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Pregunta Consulta MYSQL a un campo texto que tiene fechas

Vengo del foro PHP que me han aconsejado que deje la duda en este foro. Bueno, quizás me daréis otra opción y estoy abierto a cualquiera.

Mi problema:
Tengo en una tabla mysql muchos artículos que debo obtener a través de una columna fecha (la cual es del tipo texto.. si.. texto y no me dejan modificarlo) y las fechas de tipo texto tienen este formato "14/10/2014", "20/11/2014", ect..

Entonces le paso a una función la cual realiza una consulta select, 4 parámetros (dia_inicial, mes_inicial, dia_final, mes_final) y con ese rango intento sacar todos los registro que estén dentro de esta fecha.

Sé que between podría pero al ser texto no me lo realiza bien la consulta.

Mi solución:(Que no funciona pero os podría dar una idea)

Código MySQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, count(descripcionarticulo) AS cantidad FROM '.$tabla.'
  2. WHERE fechaalbaran LIKE "'.$dia1.'/'.$mes1.'/2014"
  3. GROUP BY descripcionarticulo ORDER BY count(descripcionarticulo) DESC
Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Leer las normas del foro, por favor.
Y la idea que me dijeron en el foro PHP es:
Código MySQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, count(descripcionarticulo) AS cantidad FROM '.$tabla.' WHERE CAST(fechaalbaran AS DATE) BETWEEN "01/10/2014" AND "04/10/2014"
La cual me gusta mucho y me ahorra código pero no me funciona..

¿Alguna propuesta, idea o arreglo?

Última edición por gnzsoloyo; 06/02/2015 a las 06:27
  #2 (permalink)  
Antiguo 06/02/2015, 06:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Vamos por el principio: Que tengas un campo de fecha pésimamente, ya es un problema grave. Y que no te lo dejen modificar, es peor.
¿Qué objeciones te ponen para cambiarlo?
Sería la solución mas simple, porque sería permanente. Ayudaría mucho a futuro, ya que no será la primera vez que te tomes con este problema...

Por otro lado, si no se puede modificar, en realidad la solución es usar funciones de conversión, siempre y cuando el contenido de ese campo sea siempre de una única fecha, y respete siempre el mismo formato.
Precisamente, el uso de columnas de tipo caracter para guardar fechas tienen el inconveniente que no permiten validar si lo que se almacena es o no una fecha correcta... Podría guardar cualquier basura.

Adicionalmente, te aconsejo que no uses LIKE para comparar datos que son magnitudes escalares. LIKE está definido para caracteres, y su uso sobre datos numéricos es totalmente desaconsejado.

Como sea, una solución aproximada sería esta:
Código MySQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad
  2. FROM $tabla
  3. WHERE fechaalbaran = STR_TO_DATE('".$dia1."'/'".$mes."'/2014', '%d/%m/%Y')
  4. GROUP BY descripcionarticulo
  5. ORDER BY cantidad DESC

Dejo la parte de variables sólo para que te orientes. En este foro no se tratan temas de programación, como podrás leer en el link que puse en tu post.

La consulta final debe quedar mas o menos así, siendo, por ejemplo, el primero de diciembre de 2014:
Código MySQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad
  2. FROM $tabla
  3. WHERE fechaalbaran = STR_TO_DATE('01/12/2014', '%d/%m/%Y')
  4. GROUP BY descripcionarticulo
  5. ORDER BY cantidad DESC
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 06/02/2015, 06:45
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas). (La consulta tardó 0.3237 segundos.)

:(
  #4 (permalink)  
Antiguo 06/02/2015, 06:52
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Estoy pensando otra solución, cada registro tiene un número de albarán de valor numérico, ¿puedo realizar dos subconsultas para averiguar el primer número de albarán de cada fecha y así tener dos valores numéricos en los que hacer el betweeen?

Código MySQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, count(descripcionarticulo) AS cantidad FROM RIVAS WHERE numeroalbaran BETWEEN
  2. (SELECT numeroalbaran FROM `RIVAS` WHERE fechaalbaran = "27/09/2014")
  3. (SELECT numeroalbaran FROM `RIVAS` WHERE fechaalbaran = "27/09/2014")

Me da error la sentencia, ¿pueden arreglármela en caso de poderse hacer?
  #5 (permalink)  
Antiguo 06/02/2015, 07:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Cita:
Iniciado por wesos Ver Mensaje
MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas). (La consulta tardó 0.3237 segundos.)

:(
Hay tres posibilidades para este error:
1) No existen datos que cumplan con el WHERE...
2) Que la fecha la tengas mal formateada en el registro.
3) Que las variables usadas no contengan lo que tu supones que tienen (eso es problema de programación)

Para el STR_TO_DATE() es lo mismo poner "1/12/2014", que poner "01/12/2014":
Código MySQL:
Ver original
  1. mysql> SELECT STR_TO_DATE('1/12/2014', '%d/%m/%Y') Fecha;
  2. +------------+
  3. | Fecha      |
  4. +------------+
  5. | 2014-12-01 |
  6. +------------+
  7. 1 row in set (0.08 sec)
  8.  
  9. mysql>
  10. mysql> SELECT STR_TO_DATE('01/12/2014', '%d/%m/%Y') Fecha;
  11. +------------+
  12. | Fecha      |
  13. +------------+
  14. | 2014-12-01 |
  15. +------------+
  16. 1 row in set (0.00 sec)

Pero no es lo mismo si el texto tiene otro formato:
Código MySQL:
Ver original
  1. mysql> SELECT STR_TO_DATE(' 1.12.2014', '%d/%m/%Y') Fecha;
  2. +-------+
  3. | Fecha |
  4. +-------+
  5. | NULL  |
  6. +-------+
  7. 1 row in set, 1 warning (0.00 sec)
  8.  
  9. mysql> SELECT STR_TO_DATE('01-12-2014', '%d/%m/%Y') Fecha;
  10. +-------+
  11. | Fecha |
  12. +-------+
  13. | NULL  |
  14. +-------+
  15. 1 row in set, 1 warning (0.00 sec)

Verifica las variables, captura la sentencia tal y como fue creada, y finalmente postea una muestra real de los datos que tienes en la tabla, en esa columna.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 06/02/2015, 07:03
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Cita:
Iniciado por wesos Ver Mensaje
Estoy pensando otra solución, cada registro tiene un número de albarán de valor numérico, ¿puedo realizar dos subconsultas para averiguar el primer número de albarán de cada fecha y así tener dos valores numéricos en los que hacer el betweeen?

Código MySQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, count(descripcionarticulo) AS cantidad FROM RIVAS WHERE numeroalbaran BETWEEN
  2. (SELECT numeroalbaran FROM `RIVAS` WHERE fechaalbaran = "27/09/2014")
  3. (SELECT numeroalbaran FROM `RIVAS` WHERE fechaalbaran = "27/09/2014")

Me da error la sentencia, ¿pueden arreglármela en caso de poderse hacer?
Poder, podrías, pero resulta ineficiente y el problema persiste.

Lo que sí te aconsejo no usar comillas para encerrar la fecha. Usa apostrofos (').
Para MySQL las dos cosas son diferentes, y no todas las instalaciones d MySQL toman las comillas como contenedores de texto. Depende de cierta configuración de arranque del Server.

Por otro lado, que digas "me da error" no es información útil...
¿Que error está devolviendo MYSQL? ¿Qué mensaje? ¿Qué numero?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 06/02/2015 a las 07:11
  #7 (permalink)  
Antiguo 06/02/2015, 08:36
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Poder, podrías, pero resulta ineficiente y el problema persiste.

Lo que sí te aconsejo no usar comillas para encerrar la fecha. Usa apostrofos (').
Para MySQL las dos cosas son diferentes, y no todas las instalaciones d MySQL toman las comillas como contenedores de texto. Depende de cierta configuración de arranque del Server.

Por otro lado, que digas "me da error" no es información útil...
¿Que error está devolviendo MYSQL? ¿Qué mensaje? ¿Qué numero?
Al ejecutar:
Código MySQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, count(descripcionarticulo) AS cantidad FROM RIVAS WHERE numeroalbaran BETWEEN
  2. (SELECT numeroalbaran FROM `RIVAS` WHERE fechaalbaran = '27/09/2014')
  3. (SELECT numeroalbaran FROM `RIVAS` WHERE fechaalbaran = '27/09/2014')

Me sale:
Código:
Error:
#1242 - Subquery returns more than 1 row
  #8 (permalink)  
Antiguo 06/02/2015, 08:42
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Hay tres posibilidades para este error:
1) No existen datos que cumplan con el WHERE...
2) Que la fecha la tengas mal formateada en el registro.
3) Que las variables usadas no contengan lo que tu supones que tienen (eso es problema de programación)
1) Si hay datos
2) La fecha es texto y está tal y como indica en la imagen inferior
3) Estoy realizando la consulta directamente en la BD, cuando me funcione la paso al código.

Al ejecutar:
Código MySQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad FROM RIVAS WHERE fechaalbaran = STR_TO_DATE('25/09/2014', '%d/%m/%Y') GROUP BY descripcionarticulo ORDER BY cantidad DESC

Me sale:
Código:
 MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas). (La consulta tardó 0.3806 segundos.)
Y mi tabla es:
  #9 (permalink)  
Antiguo 06/02/2015, 08:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Cita:
Error:
#1242 - Subquery returns more than 1 row
Bueno, es un error muy común en el aprendizaje... Las subconsultas están devolviendo múltiples registros, por lo que no puedes hacer una comparación por "=". Simplemente es eso.

Obviamente tienes en esa tabla dos o más registros con la misma fecha en ese campo, por lo que no puedes aplicar esa condición.

Volviendo al caso, ¿probaste esto?:
Código MySQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad
  2. FROM RIVAS
  3. WHERE DATE('2014-09-27') =  STR_TO_DATE(fechaalbaran, '%d/%m/%Y')

Como notarás, la anterior estaba mal escrita.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 06/02/2015, 08:47
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Muchas gracias por adelantando por el tiempo que te estás tomando.
  #11 (permalink)  
Antiguo 06/02/2015, 08:51
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Bueno, es un error muy común en el aprendizaje... Las subconsultas están devolviendo múltiples registros, por lo que no puedes hacer una comparación por "=". Simplemente es eso.

Obviamente tienes en esa tabla dos o más registros con la misma fecha en ese campo, por lo que no puedes aplicar esa condición.

Volviendo al caso, ¿probaste esto?:
Código MySQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad
  2. FROM RIVAS
  3. WHERE DATE('2014-09-27') =  STR_TO_DATE(fechaalbaran, '%d/%m/%Y')

Como notarás, la anterior estaba mal escrita.
Ahora sí me devolvió un resultado, el primero de todos los que cumplen esa condición.
Código:
 Mostrando filas 0 - 0 (total de 1, La consulta tardó 0.3765 segundos.)
¿Y para hacer la consulta entre dos fechas?
  #12 (permalink)  
Antiguo 06/02/2015, 09:13
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Bueno, es un error muy común en el aprendizaje... Las subconsultas están devolviendo múltiples registros, por lo que no puedes hacer una comparación por "=". Simplemente es eso.

Obviamente tienes en esa tabla dos o más registros con la misma fecha en ese campo, por lo que no puedes aplicar esa condición.

Volviendo al caso, ¿probaste esto?:
Código MySQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad
  2. FROM RIVAS
  3. WHERE DATE('2014-09-27') =  STR_TO_DATE(fechaalbaran, '%d/%m/%Y')

Como notarás, la anterior estaba mal escrita.
Utilizando tu consulta la he aplicado:
Código MySQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, count(descripcionarticulo) AS cantidad FROM RIVAS WHERE numeroalbaran BETWEEN
  2. (SELECT numeroalbaran, fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad FROM RIVAS WHERE DATE('2014-09-25') =  STR_TO_DATE(fechaalbaran, '%d/%m/%Y'))
  3. (SELECT numeroalbaran, fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad FROM RIVAS WHERE DATE('2014-09-27') =  STR_TO_DATE(fechaalbaran, '%d/%m/%Y'))

Y claro, me da este error:
Código:
#1241 - Operand should contain 1 column(s)
Tengo que hacer el select solo de numeroalbaran ¿no? pero como?..
  #13 (permalink)  
Antiguo 06/02/2015, 09:17
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Por favor, prueba lo que te pasé, sin modificarla, y dime que te devuelve.
Repito NO la modifiques.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 06/02/2015, 09:24
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Por favor, prueba lo que te pasé, sin modificarla, y dime que te devuelve.
Repito NO la modifiques.

Ya te lo dije más arriba, te dejo la imagen no obstante:
  #15 (permalink)  
Antiguo 06/02/2015, 09:38
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

OK. Eso es un poco más claro.
La consulta entre dos fechas es tan obvio como puede parecerlo... Usas un BETWEEN , pero no necesitas hacer subconsultas para eso, no tiene sentido, utilidad ni aprovechamiento.
No entiendo para qué las pones.
Código MySQL:
Ver original
  1. Esto si lo quieres discriminar por articulo...
  2. SELECT fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad
  3. FROM RIVAS
  4.     STR_TO_DATE(fechaalbaran, '%d/%m/%Y')
  5.         BETWEEN  DATE('2014-09-25') AND  DATE('2014-09-27')
  6. GROUP BY descripcionarticulo
Esto si quieres la sumatoria al final:
Código MySQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad
  2. FROM RIVAS
  3.     STR_TO_DATE(fechaalbaran, '%d/%m/%Y')
  4.         BETWEEN  DATE('2014-09-25') AND  DATE('2014-09-27')
  5. GROUP BY descripcionarticulo WITH ROLLUP
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #16 (permalink)  
Antiguo 06/02/2015, 09:42
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
OK. Eso es un poco más claro.
La consulta entre dos fechas es tan obvio como puede parecerlo... Usas un BETWEEN , pero no necesitas hacer subconsultas para eso, no tiene sentido, utilidad ni aprovechamiento.
No entiendo para qué las pones.
Código MySQL:
Ver original
  1. Esto si lo quieres discriminar por articulo...
  2. SELECT fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad
  3. FROM RIVAS
  4.     STR_TO_DATE(fechaalbaran, '%d/%m/%Y')
  5.         BETWEEN  DATE('2014-09-25') AND  DATE('2014-09-27')
  6. GROUP BY descripcionarticulo
Esto si quieres la sumatoria al final:
Código MySQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad
  2. FROM RIVAS
  3.     STR_TO_DATE(fechaalbaran, '%d/%m/%Y')
  4.         BETWEEN  DATE('2014-09-25') AND  DATE('2014-09-27')
  5. GROUP BY descripcionarticulo WITH ROLLUP
Si es bastante sencilla la consulta aunque sólo me da un resultado.. y hay muchísimos que están entre esas fechas:

Última edición por gnzsoloyo; 06/02/2015 a las 09:49
  #17 (permalink)  
Antiguo 06/02/2015, 09:45
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Disculpa ahora sí, con la segunda consulta si me salen todos, muchas gracias!
  #18 (permalink)  
Antiguo 06/02/2015, 09:50
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #19 (permalink)  
Antiguo 06/02/2015, 10:16
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Una cosita más :D, ¿y si quiero ordenar las cantidades de más a menos?

Código MySQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad
  2. FROM RIVAS
  3. WHERE STR_TO_DATE(fechaalbaran, '%d/%m/%Y') BETWEEN DATE('2014-12-01') AND DATE('2014-12-03')
  4. GROUP BY descripcionarticulo WITH ROLLUP
  5. ORDER BY COUNT(descripcionarticulo) desc

Error:
Código:
#1221 - Incorrect usage of CUBE/ROLLUP and ORDER BY

Última edición por gnzsoloyo; 06/02/2015 a las 10:24
  #20 (permalink)  
Antiguo 06/02/2015, 10:24
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Cita:
Iniciado por wesos Ver Mensaje
Una cosita más :D, ¿y si quiero ordenar las cantidades de más a menos?

Código MySQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad FROM RIVAS WHERE STR_TO_DATE(fechaalbaran, '%d/%m/%Y') BETWEEN DATE('2014-12-01') AND DATE('2014-12-03') GROUP BY descripcionarticulo WITH ROLLUP ORDER BY COUNT(descripcionarticulo) desc

Error:
Código:
#1221 - Incorrect usage of CUBE/ROLLUP and ORDER BY
Me autocorrijo:
Código MySQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad FROM RIVAS WHERE STR_TO_DATE(fechaalbaran, '%d/%m/%Y') BETWEEN DATE('2014-12-01') AND DATE('2014-12-03') GROUP BY descripcionarticulo ORDER BY COUNT(descripcionarticulo) desc
  #21 (permalink)  
Antiguo 06/02/2015, 10:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Prueba así:
Código SQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad
  2. FROM RIVAS
  3. WHERE STR_TO_DATE(fechaalbaran, '%d/%m/%Y') BETWEEN DATE('2014-12-01') AND DATE('2014-12-03')
  4. GROUP BY descripcionarticulo WITH ROLLUP
  5. ORDER BY cantidad;

o así:
Código SQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad
  2. FROM RIVAS
  3. WHERE STR_TO_DATE(fechaalbaran, '%d/%m/%Y') BETWEEN DATE('2014-12-01') AND DATE('2014-12-03')
  4. GROUP BY descripcionarticulo DESC WITH ROLLUP;
DE todos modos de base es un error que uses un COUNT de esa forma en el ORDER BY

Ahora bien, ten en cuenta otro detalle: Al ordenar de esa forma, la linea de totalización será la primera en salir, y no la última.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #22 (permalink)  
Antiguo 06/02/2015, 10:53
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Prueba así:
Código SQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad
  2. FROM RIVAS
  3. WHERE STR_TO_DATE(fechaalbaran, '%d/%m/%Y') BETWEEN DATE('2014-12-01') AND DATE('2014-12-03')
  4. GROUP BY descripcionarticulo WITH ROLLUP
  5. ORDER BY cantidad;

o así:
Código SQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad
  2. FROM RIVAS
  3. WHERE STR_TO_DATE(fechaalbaran, '%d/%m/%Y') BETWEEN DATE('2014-12-01') AND DATE('2014-12-03')
  4. GROUP BY descripcionarticulo DESC WITH ROLLUP;
DE todos modos de base es un error que uses un COUNT de esa forma en el ORDER BY

Ahora bien, ten en cuenta otro detalle: Al ordenar de esa forma, la linea de totalización será la primera en salir, y no la última.
Con la primera consulta me da este error:
Código:
#1221 - Incorrect usage of CUBE/ROLLUP and ORDER BY
Con la segunda consulta no me salen ordenados, no da error y el sumatorio me sale al final pero no estan ordenados.

Y es cierto, con mi consulta el sumatorio me aparece al principio y prefiero que esté al final.. ¿qué propones?
  #23 (permalink)  
Antiguo 06/02/2015, 11:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Muestra como salen ordenados.
DEcir que no salen, no me resulta info útil... Necesito ver.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #24 (permalink)  
Antiguo 06/02/2015, 11:11
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Muestra como salen ordenados.
DEcir que no salen, no me resulta info útil... Necesito ver.
Vale jeje,
  #25 (permalink)  
Antiguo 06/02/2015, 11:19
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

Eso está bien ordenado...
Estás indicando que lo ordene por el campo de descripción de artículo, y eso es lo que hace.

Si quieres que lo ordene por las cantidades, debe hacerse de otro modo:
Código MySQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, cantidad
  2.     (SELECT fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad
  3.     FROM RIVAS  
  4.     WHERE STR_TO_DATE(fechaalbaran, '%d/%m/%Y')
  5.         BETWEEN DATE('2014-12-01') AND DATE('2014-12-03')
  6.     GROUP BY descripcionarticulo) T1
  7. ORDER BY cantidad DESC;

Y para que te devuelva la ultima linea, la cosa será algo complicada:
Código MySQL:
Ver original
  1. SELECT fechaalbaran, descripcionarticulo, cantidad
  2.   (SELECT fechaalbaran, descripcionarticulo, cantidad
  3.   FROM
  4.       (SELECT fechaalbaran, descripcionarticulo, COUNT(descripcionarticulo) cantidad
  5.       FROM RIVAS  
  6.       WHERE STR_TO_DATE(fechaalbaran, '%d/%m/%Y')
  7.           BETWEEN DATE('2014-12-01') AND DATE('2014-12-03')
  8.       GROUP BY descripcionarticulo) T1
  9.   ORDER BY cantidad DESC)
  10. SELECT 'Total' fechaalbaran, '' descripcionarticulo, COUNT(descripcionarticulo) cantidad
  11. FROM RIVAS  
  12. WHERE STR_TO_DATE(fechaalbaran, '%d/%m/%Y')
  13.   BETWEEN DATE('2014-12-01') AND DATE('2014-12-03');
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #26 (permalink)  
Antiguo 06/02/2015, 11:25
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Consulta MYSQL a un campo texto que tiene fechas

No se cómo agradecerte esto.. de verdad muchas gracias, menudo curro!

Etiquetas: campo, fecha, php, registro, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:31.