Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

463
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!