好的,所以我有这个问题:
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周总和并计算今年的当周,这样我就可以获得每周成本的百分比
“费用/周数”=每周费用。
例如今天2016-01-18是一年中的第四周
支付总额(2015年和2016年4周)= 4000.00美元 周= 52 + 4 = 56
4000.00 / 56 =每周平均成本71.4285714美元
同样的事情适用于月份,它应该用13进行除法,而cus 1月是1月,它用1做。
我可以这样做:
SUM(week_cost)/(12+ MONTH(CURDATE()));
和
SUM(week_cost)/(52 + WEEK(CURDATE()));
但这只会解决今年的问题!!
答案 0 :(得分:0)
您应该使用DATEDIFF()来计算每个maestro从给定日期开始工作的天数,“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,最好使用预备语句。