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 Puntos227320

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.

0voto

carlossevi comentado

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.

0voto

Leonardo-Tadei comentado

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, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

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

Conecta