好的,所以我有这个查询:
SELECT obrero as MAESTRO, sum(costo_semanal) AS TOTAL_COST,
ROUND(SUM(week_cost)/MONTH(CURDATE()),2) AS MONTHLY_COST,
ROUND(SUM(week_cost)/WEEK(CURDATE()),2) AS WEEKLY_COST
from tbl_costos WHERE obrero ='$maestro'
我这样做了,它在 2015 年效果很好,问题是现在在 2016 年我们回到第 1 周和第 1 个月,所以我没有适当的划分。
我需要完成的是将过去一年的 52 周相加,并将今年的当前一周相加,这样我就可以每周获得 % 的成本
"成本/周数"= 每周 $cost。
例如,今天 2016-01-18 是一年中的第 4 周
支付总额(2015 年和 2016 年 4 周)= 4000.00 USD周 = 52 + 4 = 56
4000.00/56 = 每周平均成本 71.4285714 USD
同样的事情也适用于月份,它应该用 13 进行除法,而 cus 1 月是第 1 个月,它超过 1。
我可以做:
SUM(week_cost)/(12+ MONTH(CURDATE()));
和
SUM(week_cost)/(52 + WEEK(CURDATE()));
但这只能解决今年的问题!!
您应该使用 DATEDIFF() 来计算每位大师从给定日期"start_date"到给定结束日期"end_date"的工作天数,然后根据需要将这些天数转换为周、月和年。
保持灵活性,并预测每个大师可以从任何给定日期开始工作,或者可以从任何给定日期开始要求报告。 您假设每位大师都在 2015-01-01 开始工作,并且所有报告都应牢记这一点。 现实是不同的。
Select obrero as MAESTRO, sum(costo_semanal) as TOTAL_COST, ROUND(SUM(costo_semanal/ROUND(DATEDIFF(start_date, end_date)/30,0)),0) AS MONTHLY_COST, ROUND(SUM(costo_semanal/ROUND(DATEDIFF(start_date, end_date)/7,0)),0) AS WEEKLY_COST FROM tbl_costos WHERE obrero=$maestro;
不要将变量$maestro放在查询上,最好使用 READY 语句。