Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

533
Vistas
¿Cómo obtener el rango de fechas de las últimas 7 semanas, 7 meses desde la fecha actual de PHP?

¿Cómo puedo obtener el intervalo de fechas de las últimas siete semanas/meses a partir de la fecha actual? Ya lo he hecho con los últimos siete días.

obtener el total de ventas de los últimos siete días, semanas y meses agrupados por 7 días particulares, 7 semanas particulares y 7 meses particulares

ex:

 Today : 08/18/2021

Últimas siete semanas

 08/08/2021 - 08/14/2021 08/01/2021 - 08/07/2021 etc.

Últimos siete meses

 07/01/2021 - 07/31/2021 06/01/2021 - 06/30/2021 etc.

La siguiente consulta que he hecho durante los últimos siete días

 $today = date("Ymd"); $lastsevenDays = date('Ym-d', strtotime('-7 days')); SELECT sales.salesDay as sales_day, ROUND(sum( IFNULL( payment.tmpNetTotal, 0 ) ),2)AS sales, payment.createdDateTime as Day_date FROM srp_erp_pos_menusalesmaster AS sales JOIN ( SELECT SUM( IFNULL( amount, 0 ) ) AS tmpNetTotal,createdDateTime, menuSalesID FROM srp_erp_pos_menusalespayments WHERE createdDateTime BETWEEN '" . $lastsevenDays . "' AND '" . $today . "' GROUP BY menuSalesID ) AS payment ON sales.menuSalesID = payment.menuSalesID WHERE isHold = 0 AND sales.isVoid = 0 AND companyID = $companyID GROUP BY sales.salesDay ORDER BY payment.createdDateTime

Ahora, de la misma manera, estoy pensando en una forma de recuperar las últimas 7 semanas y los últimos siete meses.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Me las arreglé para improvisar una consulta que hace lo que quieres durante las semanas, espero. Primero toda la consulta:

 SELECT S.salesDay as sales_day, ROUND(sum(IFNULL(P.tmpNetTotal, 0)),2) AS sales, P.createdDateTime as Day_date FROM srp_erp_pos_menusalesmaster AS S JOIN (SELECT SUM(IFNULL(amount, 0)) AS tmpNetTotal, createdDateTime, menuSalesID FROM srp_erp_pos_menusalespayments WHERE createdDateTime > DATE_SUB(NOW(), INTERVAL 7 WEEK) GROUP BY menuSalesID) AS P ON S.menuSalesID = P.menuSalesID WHERE S.isHold = 0 AND S.isVoid = 0 AND S.companyID = $companyID GROUP BY FLOOR((TO_DAYS(CURDATE()) - TO_DAYS(DATE(S.salesDay))) / 7) ORDER BY P.createdDateTime

Mi suposición es que sales.salesDay contiene una fecha y hora adecuadas.

Cambié dos cosas:

  • En la SELECT interna, cambié la condición a WHERE createdDateTime > DATE_SUB(NOW(), INTERVAL 7 WEEK) , usando funciones en MySQL en lugar de en PHP.
  • Para agrupar por semanas cambié la agrupación a: GROUP BY FLOOR((TO_DAYS(CURDATE()) - TO_DAYS(DATE(S.salesDay))) / 7) , usando la función FLOOR() . Convierto fecha/hora en fechas y luego en un número de día. restando esos te dan los días en el pasado, divide por 7 y tomando el FLOOR() te da semanas.

Lo mismo se puede hacer durante meses.

El código no está probado y es posible que no funcione a la perfección, pero espero que esto le brinde un camino a seguir.

over 4 years ago · Santiago Trujillo Denunciar

0

Si tiene cada "día" resumido en una sola tabla, entonces es fácil resumir eso en los últimos N días, ya sea que haya varias semanas o meses.

Si la tabla de resumen tiene sum_dollars , count_items , entonces

 SELECT SUM(sum_dollars) -- total dollars over the larger period SUM(count_items) -- how many items there were SUM(sum_dollars) / SUM(count_items) -- average price FROM summary_table WHERE date ...

(Tenga en cuenta que no tenía avg_price en la tabla de resumen porque AVG(avg_..) suele ser la fórmula incorrecta).

Por lo tanto, cree y mantenga (todas las noches) una tabla de resumen por día. Ver http://mysql.rjweb.org/doc.php/summarytables

PD. "hoy" es CURDATE() en SQL. Más específicamente, eso es medianoche esta mañana. "Hace 7 meses" es CURDATE() - INTERVAL 7 MONTH

PROBABLE ERROR: No use BETWEEN ; es 'inclusivo'. En su lugar, haz algo como

 WHERE createdDateTime >= CURDATE() - INTERVAL 7 MONTH AND createdDateTime < CURDATE()
over 4 years ago · Santiago Trujillo Denunciar

0

Deberías probar esto:

 $today = date("Ymd"); $lastsevenDays = date('Ym-d', strtotime('-7 days')); $lastsevenMonths = date('Ym-d', strtotime('-7 months')); // Last seven weeks SELECT sales.salesDay as sales_day, ROUND(sum( IFNULL( payment.tmpNetTotal, 0 ) ),2)AS sales, payment.createdDateTime as Day_date FROM srp_erp_pos_menusalesmaster AS sales JOIN ( SELECT SUM( IFNULL( amount, 0 ) ) AS tmpNetTotal,createdDateTime, menuSalesID FROM srp_erp_pos_menusalespayments WHERE DATE(createdDateTime) >= DATE($lastsevenDays) AND DATE(createdDateTime) < DATE($today) GROUP BY menuSalesID ) AS payment ON sales.menuSalesID = payment.menuSalesID WHERE isHold = 0 AND sales.isVoid = 0 AND companyID = $companyID GROUP BY sales.salesDay ORDER BY payment.createdDateTime; // Last seven Months SELECT sales.salesDay as sales_day, ROUND(sum( IFNULL( payment.tmpNetTotal, 0 ) ),2)AS sales, payment.createdDateTime as Day_date FROM srp_erp_pos_menusalesmaster AS sales JOIN ( SELECT SUM( IFNULL( amount, 0 ) ) AS tmpNetTotal,createdDateTime, menuSalesID FROM srp_erp_pos_menusalespayments WHERE DATE(createdDateTime) >= DATE($lastsevenMonths) AND DATE(createdDateTime) < DATE($today) GROUP BY menuSalesID ) AS payment ON sales.menuSalesID = payment.menuSalesID WHERE isHold = 0 AND sales.isVoid = 0 AND companyID = $companyID GROUP BY sales.salesDay ORDER BY payment.createdDateTime;
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda