php周(curdate())其他年份的总和

时间:2016-01-19 00:08:16

标签: php mysql

好的,所以我有这个问题:

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()));

但这只会解决今年的问题!!

1 个答案:

答案 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,最好使用预备语句