如何根据两列中的两个日期在mysql中总计金额

时间:2017-01-21 12:57:31

标签: mysql database datetime group-by sum

我有一个tbl_remit,我需要获得最后的汇款。

我正在开发系统,我需要使用雇主的最后一笔汇款x 12来获得每个雇主的潜在收款。理想情况下,雇主应该每个月汇款一次。但有些情况下,雇主会在同一个月再次为新雇用的额外员工提供补助。我使用的Mysql语句就是这个。

SELECT Employer, MAX(AP_From) as AP_From, 
                MAX(AP_To) as AP_To, 
                MAX(Amount) as Last_Remittance, 
                (MAX(Amount) *12) AS LastRemit_x12
FROM view_remit
GROUP BY PEN

结果

|RemitNo.|  Employer  |  ap_from  |   ap_to   | amount |
|   1    |      1     |2016-01-01 |2016-01-31 |  2000  |
|   2    |      1     |2016-02-01 |2016-02-28 |  2000  |
|   3    |      1     |2016-03-01 |2016-03-31 |  2000  |
|   4    |      1     |2016-03-01 |2016-03-31 |   400  |

通过这样做,我最终得到了错误的潜在收集。

What I've got:
400 - Last_Remittance
4800 - LastRemit_x12 (potential collection)

What I need to get:
2400 - Last_Remittance
28800 - LastRemit_x12 (potential collection)

非常感谢任何帮助。我这个项目没有团队。这对某些人来说可能是一个新手问题,但对我来说这真的是一个复杂的难题。提前谢谢你。

1 个答案:

答案 0 :(得分:1)

您想要过滤最后一段时间的数据。因此,请考虑where而不是group by。然后,您希望按雇主汇总。

这是一种方法:

SELECT Employer, MAX(AP_From) as AP_From, MAX(AP_To) as AP_To,
       SUM(Amount) as Last_Remittance,
       (SUM(Amount) * 12) AS LastRemit_x12
FROM view_remit vr
WHERE vr.ap_from = (SELECT MAX(vr2.ap_from)
                    FROM view_remit vr2
                    WHERE vr2.Employer = vr.Employer
                   )
GROUP BY Employer;

编辑:

对于性能,您需要view_remit(Employer, ap_from)上的索引。当然,这假设view_remit实际上是一个表格。 。 。这可能不太可能。

如果您想提高效果,则需要了解视图。