entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

¿Cómo obtener el mes anterior con sql?

Necesito obtener el mes anterior con sql. Se almacena el valor en la BD con un datetime.

Por ejemplo, para obtener los usuarios de este mes uso:

SELECT * FROM tbl_concurso_participantes WHERE EXTRACT(month FROM mes) = $mesActual AND id_user = $idUser

$mesActual = date('m');

Pues esto mismo pero con el mes anterior, muchas gracias!

1 Respuesta

4votos

Leonardo-Tadei Puntos192500

Hola Daniel,

podés hacer esto con las funciones de cálculo de fechas de MySQL, incluso ahorrándote la varialbe $mesActual porque podés obtenerla con la función CURDATE() dentro de la query.

La cuestión a resolver acá es que en caso de que el mes actual sea Enero, mes 1, el mes anterior es 0 y al no ser un més válido, la query devolverá vacío. Hay que hacer algo como:

SELECT * FROM tbl_concurso_participantes
WHERE MONTH(fecha) = MONTH(DATE_ADD(CURDATE(),INTERVAL -1 MONTH));

asumiendo que el campo datime se llama fecha.

Acá hay una buena explicación y una sintaxis alternativa usando aritmética modular para sacarse los 0 y los 13 de encima en el cálculo del mes: http://dev.mysql.com/doc/refman/5.0/es/date-calculations.html

Esto permite escribir tu query del mes actual como:

SELECT * FROM tbl_concurso_participantes
WHERE MONTH(fecha) = MONTH(CURDATE()  AND id_user = $idUser ;

que compara el mes de la fecha almacenada con el mes dado por CURDATE() desde la DB.

Saludos!

PD: perdón por el posible cambio de nombre del campo con la fecha, pero que un campo conteniendo una fecha en datetime se llame "mes" me hace dificil pensalo como una fecha en vez de como un mes.

carlossevi comentado Junio 23, 2014

Simplemente comentar que deberías tener cuidado porque en estas dos comparaciones no se está teniendo en cuenta el AÑO por lo que podrían mezclarse resultados del mismo mes en diferentes años.

Leonardo-Tadei comentado Junio 23, 2014

Gracias Carlos!

Había visto esto y escribiendo la respuesta al final me olvidé de poner algo al respecto :-(

Se puede usar la misma estrategia con INTERVAL para incluir el año como parte de la query. En la página que enlazo hay un ejemplo que usa RIGHT que es la función que se queda con una parte del campo. Acá se podría comparar con (RIGHT(CURDATE(),8) y quedaría año-mes, que es lo que hace falta para la comparación.

Saludos y gracias por estar atento!

Por favor ingresa o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Actividad Reciente

  • steven ganó una medalla hace 10 horas

    Veterano - Primera visita hace más de 180 días
  • leog.1992 ganó una medalla hace 1 día

    Renovador - Received Buena Respuesta badge in resp…
  • leog.1992 ganó una medalla hace 1 día

    Medallista - Received total of 10 badges
  • leog.1992 ganó una medalla hace 1 día

    Buena Respuesta - Recibido +1 votos en respuesta
  • sagrario ganó una medalla hace 1 día

    Buena Pregunta - Recibido +1 votos en pregunta
  • leog.1992 respondió hace 1 día

    ticket en java con mysql
  • leog.1992 ganó una medalla hace 1 día

    Antepasado - Primera visita hace más de 365 días
  • leog.1992 ganó una medalla hace 1 día

    Veterano - Primera visita hace más de 180 días
  • Leonardo-Tadei ganó una medalla hace 2 días

    Buena Respuesta - Recibido +1 votos en respuesta
  • nico140 ganó una medalla hace 3 días

    Buena Pregunta - Recibido +1 votos en pregunta

¿Eres Usuario Apple?

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta