我有一个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)
任何帮助将不胜感激。我在这个项目中没有团队。这对某些人来说可能是一个新手问题,但对我来说,这确实是一个复杂的难题。提前谢谢你。
您想要筛选上一个时间段的数据。 所以,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
真的是一张桌子。这可能不太可能。
如果要提高性能,则需要了解视图。