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

Duda con funciones Week y Month

Estas en el tema de Duda con funciones Week y Month en el foro de Mysql en Foros del Web. Hola, buenas tardes Estoy tratando de realizar lo siguiente: Tengo una tabla con los siguientes campos [id, producto, cantidad, costo, fecha_compra. fecha_vencimiento], es una tabla ...
  #1 (permalink)  
Antiguo 11/02/2019, 16:18
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 794
Antigüedad: 14 años, 6 meses
Puntos: 24
Duda con funciones Week y Month

Hola, buenas tardes

Estoy tratando de realizar lo siguiente:

Tengo una tabla con los siguientes campos [id, producto, cantidad, costo, fecha_compra. fecha_vencimiento], es una tabla para productos perecederos, en la cuál se registra el nombre del producto, su costo, la cantidad comprada, cuándo se compro y cuándo vence.

Y quiero realizar un consulta que me de lo comprado en el día, en la semana y en el mes actuales, por ejemplo, siendo la fecha 2019-02-11 (el día de hoy), que me arroje lo resultados de la semana en curso, siendo esta la semana 7 del año, o los resultados de este mes.

Quizá me estoy equivocando al interpretar las funciones de fechas de MySQL y deba buscar por otro medio, pero si hoy es lunes-> domingo de la semana 7 del año, me arroje los resultados de esta semana (tomando en cuenta que empiece la semana en lunes).

He leído la documentación de MySQL y muchos ejemplos por Internet y he tratado de estás diferentes formas:

Código MySQL:
Ver original
  1. Select * from dpv_compras Where YEARWEEK('2019-02-11',1)
  2. Select * from dpv_compras Where WEEK('2019-02-11',1)

Arrojando lo siguiente:

Código MySQL:
Ver original
  1. Mostrando filas 0 - 21 (total de 22, La consulta tardó 0.0010 segundos.)

Siendo que existen filas con fechas desde el 1ro de enero al día de hoy (2019-02-11)

Entiendo que la primera opción me debería dar los resultados de el año 2019, semana 07 y la segunda sólo la semana 07, entonces probé de la siguiente forma:

Código MySQL:
Ver original
  1. Select * from dpv_compras Where YEARWEEK('2019-02-11',1) = YEARWEEK(CURRENT_DATE(),1)

Siendo el mismo resultado...

Pueden ver la tabla como está en la siguiente imagen:



[url de la imagen si no se visualiza https://ibb.co/sWGYS1L]

Entonces, no sé si no estoy interpretando bien la función o algo no estoy haciendo bien.

De antemano, les agradezco por sus comentarios. Sigo investigando.

Saludos!
  #2 (permalink)  
Antiguo 14/02/2019, 13:44
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 12 años, 10 meses
Puntos: 447
Respuesta: Duda con funciones Week y Month

Hola Middrel:

el problema con tu consulta es que en ningún momento estás consultando o filtrando la información de tu TABLA, sino que haces comparaciones con valores fijos. Va un ejemplo, suponiendo la siguiente tabla:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+------------+
  3. | id   | fecha      |
  4. +------+------------+
  5. |    1 | 2019-01-01 |
  6. |    2 | 2019-01-03 |
  7. |    3 | 2019-01-04 |
  8. |    4 | 2019-01-07 |
  9. |    5 | 2019-01-09 |
  10. |    6 | 2019-01-10 |
  11. |    7 | 2019-01-15 |
  12. |    8 | 2019-01-20 |
  13. |    9 | 2019-01-22 |
  14. |   10 | 2019-01-23 |
  15. |   11 | 2019-01-24 |
  16. |   12 | 2019-01-30 |
  17. |   13 | 2019-02-06 |
  18. |   14 | 2019-02-11 |
  19. |   15 | 2019-02-14 |
  20. +------+------------+
  21. 12 rows in set (0.00 sec)


entonces, para saber la semana a la que corresponde cada fecha debes de utilizar el campo FECHA de tu tabla, es decir, algo asi:

Código MySQL:
Ver original
  1. YEARWEEK(fecha, 1)

Sin embargo tu en el WHERE estás mandando ya una fecha fija,

Código MySQL:
Ver original
  1. YEARWEEK('2019-02-11',1)

Observa la diferencia haciendo ambas formas a la vez:

Código MySQL:
Ver original
  1. mysql> SELECT fecha, YEARWEEK(fecha, 1) semana, YEARWEEK('2019-01-25') semana_fija  FROM tabla;
  2. mysql> SELECT fecha, YEARWEEK(fecha, 1) semana, YEARWEEK('2019-01-25') semana_fija  FROM tabla;
  3. +------------+--------+-------------+
  4. | fecha      | semana | semana_fija |
  5. +------------+--------+-------------+
  6. | 2019-01-01 | 201901 |      201903 |
  7. | 2019-01-03 | 201901 |      201903 |
  8. | 2019-01-04 | 201901 |      201903 |
  9. | 2019-01-07 | 201902 |      201903 |
  10. | 2019-01-09 | 201902 |      201903 |
  11. | 2019-01-10 | 201902 |      201903 |
  12. | 2019-01-15 | 201903 |      201903 |
  13. | 2019-01-20 | 201903 |      201903 |
  14. | 2019-01-22 | 201904 |      201903 |
  15. | 2019-01-23 | 201904 |      201903 |
  16. | 2019-01-24 | 201904 |      201903 |
  17. | 2019-01-30 | 201905 |      201903 |
  18. | 2019-02-06 | 201906 |      201903 |
  19. | 2019-02-11 | 201907 |      201903 |
  20. | 2019-02-14 | 201907 |      201903 |
  21. +------------+--------+-------------+
  22. 15 rows in set (0.00 sec)

en otra palabras la ultima columna NO REALIZA UN CÁLCULO SOBRE LA FECHA DE LA TABLA, sino sobre la fecha que estás mandando como parámetro.

entonces para filtrar sólo los registros de la semana ACTUAL, tendrías que hacer algo así:

Código MySQL:
Ver original
  1. mysql> SELECT fecha, YEARWEEK(fecha, 1) semana, YEARWEEK('2019-01-25') semana_fija
  2.     -> FROM tabla
  3.     -> WHERE YEARWEEK(fecha, 1) = YEARWEEK(curdate(), 1);
  4. +------------+--------+-------------+
  5. | fecha      | semana | semana_fija |
  6. +------------+--------+-------------+
  7. | 2019-02-11 | 201907 |      201903 |
  8. | 2019-02-14 | 201907 |      201903 |
  9. +------------+--------+-------------+
  10. 2 rows in set (0.04 sec)

¿Se entiende?

Haz la prueba y nos comentas.

Saludos
Leo.

Etiquetas: comentarios, funciones, 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 19:50.