我有一个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)
非常感谢任何帮助。我这个项目没有团队。这对某些人来说可能是一个新手问题,但对我来说这真的是一个复杂的难题。提前谢谢你。
答案 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
实际上是一个表格。 。 。这可能不太可能。
如果您想提高效果,则需要了解视图。