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

Consulta, restar un mes, tomando en cuenta el año

Estas en el tema de Consulta, restar un mes, tomando en cuenta el año en el foro de Mysql en Foros del Web. Hola amigos Tengo un problema, esta consulta en visual studio(VB.NET) me trae dos filas por cada usuario, pero la idea es que me de solo ...
  #1 (permalink)  
Antiguo 31/03/2014, 15:39
 
Fecha de Ingreso: marzo-2014
Mensajes: 4
Antigüedad: 10 años, 1 mes
Puntos: 0
Consulta, restar un mes, tomando en cuenta el año

Hola amigos
Tengo un problema, esta consulta en visual studio(VB.NET) me trae dos filas por cada usuario, pero la idea es que me de solo una, la del mes pasado al actual. La tabla, por ejemplo, hoy, no solo me trae las filas de cada usuario del mes de febrero 2014, sino también las de febrero 2015. Cómo sería la consulta para que solo me dé las filas del mes pasado al actual?
Aqui va mi código
Código MySQL:
Ver original
  1. SELECT * FROM tablita
  2. WHERE MONTH(mes) = MOD(MONTH(CURDATE()), 12) - 1 and kwh is null;
Cita:
Editado: Código de programación no permitido en foros de Bases de Datos..
Por favor, leer las normas del foro antes de postear por primera vez.

Última edición por gnzsoloyo; 31/03/2014 a las 16:47
  #2 (permalink)  
Antiguo 31/03/2014, 16:07
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta, restar un mes, tomando en cuenta el año

Hola lucas1234:

En primer lugar, NO PONGAS CÓDIGO DE PROGRAMACIÓN DE NINGÚN LENGUAJE EN ESTE FORO, está absolutamente prohibido... enfócate sólo en el código de SQL... o si lo prefieres, postea en el foro del lenguaje de programación que estés utilizando, ojo con eso...

Para resolver tu problema, basta con que incluyas en en WHERE, una condición para que pregunte también por el AÑO ACTUAL, no solo por el mes... de manera semejante a la función MONTH, la función YEAR te sirve para extraes sólo el año de una fecha... Si tu campo MES es de tipo DATE o DATETIME, basta con que hagas lo siguiente:

Código MySQL:
Ver original
  1. FROM tablita
  2.    MONTH(mes) = MONTH(CURDATE()) - 1 AND
  3.    YEAR(mes) = YEAR(CURDATE()) AND
  4.    kwh IS NULL;

No entendí muy bien qué caso tiene utilizar la función MOD en esto... desde mi punto de vista no es necesario, pero bueno, quizás tu tengas una razón para utilizarlo... aunque para este caso, el resultado es exactamente el mismo:

Código MySQL:
Ver original
  1. mysql> SELECT MONTH(CURDATE()) - 1, MOD(MONTH(CURDATE()), 12) - 1;
  2. +----------------------+-------------------------------+
  3. | MONTH(CURDATE()) - 1 | MOD(MONTH(CURDATE()), 12) - 1 |
  4. +----------------------+-------------------------------+
  5. |                    2 |                             2 |
  6. +----------------------+-------------------------------+
  7. 1 row in set (0.00 sec)

Saludos
Leo
  #3 (permalink)  
Antiguo 01/04/2014, 02:10
 
Fecha de Ingreso: marzo-2014
Mensajes: 4
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Consulta, restar un mes, tomando en cuenta el año

Mmmm, me rectifico. Es que no funciona siempre. Este mes va muy bien. Pero en el mes de enero, cuando haga un mes atrás me llava a diciembre, correcto, pero si le digo que sea del año actual... entonces no me va a devolver los datos del mes de diciembre del año pasado
Cómo podría solucionarse?


Comentario rectificado:
Sí señor! Perfecto. Muchas gracias, justo lo que necesitaba
Perdón por lo del código, lo tendré en cuenta
GRACIAS

Última edición por lucas1234; 01/04/2014 a las 06:38 Razón: No funciona siempre
  #4 (permalink)  
Antiguo 01/04/2014, 10:11
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta, restar un mes, tomando en cuenta el año

Hola de nuevo lucas1234:

tienes razón en una consideración:

Cita:
Pero en el mes de enero, cuando haga un mes atrás me llava a diciembre, correcto, pero si le digo que sea del año actual... entonces no me va a devolver los datos del mes de diciembre del año pasado
Cómo podría solucionarse?
En este caso lo que tienes que hacer es agregar una condición "especial" para el mes de enero... es decir... es decir, algo así:

Para todos los meses excepto ENERO:

Código:
MONTH(CURDATE()) != 1 AND
   MONTH(mes) = MONTH(CURDATE()) - 1 AND 
   YEAR(mes) = YEAR(CURDATE())
Excusivamente para el mes de enero:

Código:
(MONTH(CURDATE()) = 1 AND
   MONTH(mes) = MONTH(CURDATE()) - 1 AND 
   YEAR(mes) = YEAR(CURDATE()) - 1)
De tal suerte que la consulta debería quedar más o menos así:

Código MySQL:
Ver original
  1. FROM tablita
  2.    ((MONTH(CURDATE()) != 1 AND
  3.    MONTH(mes) = MONTH(CURDATE()) - 1 AND
  4.    YEAR(mes) = YEAR(CURDATE())) OR
  5.    (MONTH(CURDATE()) = 1 AND
  6.    MONTH(mes) = MONTH(CURDATE()) - 1 AND
  7.    YEAR(mes) = YEAR(CURDATE()) - 1)) AND
  8.    kwh IS NULL;

Ojo con los paréntesis... dado que combinas AND's y OR's, debes tener cuidado de agrupar correctamente.

Dale un vistazo y nos comentas.

Saludos
Leo.
  #5 (permalink)  
Antiguo 01/04/2014, 14:37
 
Fecha de Ingreso: marzo-2014
Mensajes: 4
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Consulta, restar un mes, tomando en cuenta el año

Ahora sí, completísimo. Muchas gracias

Etiquetas: año, null, restar, 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 04:35.