我的表名为payment_schedule,内容如下
我想用MAX(due_date)GROUPED BY loan_application_id获取记录
参考上面图像中的记录,我希望结果如下
我尝试使用以下SQL查询
SELECT
id,
MAX(due_date) as due_date,
loan_application_id
FROM
payment_schedule
GROUP BY
loan_application_id
这返回给我以下结果.
如您所见,它不会返回给定截止日期的相应ID.
另外,我有另一个名为payment_type_id的列,当payment_type_id的值为3时,我需要排除行.
我在这里尝试了几种解决方案,似乎没什么用,怎么去呢?
谢谢.
解决方法:
这称为Group-wise Maximum,在此标记为greatest-n-per-group.最传统的方法是找到所需的值并进行连接以获得每组的相应行,如下所示:
SELECT
ps.id,
ps.due_date,
ps.loan_application_id
FROM
(
SELECT
MAX(due_date) as due_date,
loan_application_id
FROM payment_schedule
WHERE payment_type_id != '3'
GROUP BY loan_application_id
) ps2
LEFT JOIN payment_schedule ps USING (loan_application_id)
WHERE ps.due_date = ps2.due_date
AND ps.payment_type_id != '3'
GROUP BY ps.loan_application_id
还值得一提的是,如果您的loan_application_id和due_date列上有索引,则此查询的运行速度将快上百倍.
标签:mysql,database,greatest-n-per-group,greatest-n-per-group
来源: https://codeday.me/bug/20190609/1202129.html