Вы храните месяцы CSV в столбце mnth
, что не является оптимальным дизайном таблицы. По крайней мере, вы должны хранить каждый месяц в отдельной строке, еще лучше будет просто хранить одну дату для каждого платежа. Вот один из способов ответить, учитывая текущий дизайн:
SELECT
p1.id,
p1.cust_id,
p1.mnth,
p1.year,
p1.amount
FROM
(
SELECT id, cust_id, mnth, year, amount,
CASE WHEN CONCAT('%,', mnth, ',%') LIKE '%,12,%' THEN 12
WHEN CONCAT('%,', mnth, ',%') LIKE '%,11,%' THEN 11
WHEN CONCAT('%,', mnth, ',%') LIKE '%,10,%' THEN 10
WHEN CONCAT('%,', mnth, ',%') LIKE '%,9,%' THEN 9
WHEN CONCAT('%,', mnth, ',%') LIKE '%,8,%' THEN 8
WHEN CONCAT('%,', mnth, ',%') LIKE '%,7,%' THEN 7
WHEN CONCAT('%,', mnth, ',%') LIKE '%,6,%' THEN 6
WHEN CONCAT('%,', mnth, ',%') LIKE '%,5,%' THEN 5
WHEN CONCAT('%,', mnth, ',%') LIKE '%,4,%' THEN 4
WHEN CONCAT('%,', mnth, ',%') LIKE '%,3,%' THEN 3
WHEN CONCAT('%,', mnth, ',%') LIKE '%,2,%' THEN 2
WHEN CONCAT('%,', mnth, ',%') LIKE '%,1,%' THEN 1 END AS mnth_num
FROM Payment
) p1
INNER JOIN
(
SELECT
MAX(CASE WHEN CONCAT('%,', mnth, ',%') LIKE '%,12,%' THEN 12
WHEN CONCAT('%,', mnth, ',%') LIKE '%,11,%' THEN 11
WHEN CONCAT('%,', mnth, ',%') LIKE '%,10,%' THEN 10
WHEN CONCAT('%,', mnth, ',%') LIKE '%,9,%' THEN 9
WHEN CONCAT('%,', mnth, ',%') LIKE '%,8,%' THEN 8
WHEN CONCAT('%,', mnth, ',%') LIKE '%,7,%' THEN 7
WHEN CONCAT('%,', mnth, ',%') LIKE '%,6,%' THEN 6
WHEN CONCAT('%,', mnth, ',%') LIKE '%,5,%' THEN 5
WHEN CONCAT('%,', mnth, ',%') LIKE '%,4,%' THEN 4
WHEN CONCAT('%,', mnth, ',%') LIKE '%,3,%' THEN 3
WHEN CONCAT('%,', mnth, ',%') LIKE '%,2,%' THEN 2
WHEN CONCAT('%,', mnth, ',%') LIKE '%,1,%' THEN 1 END) AS max_mnth,
MAX(year) AS max_year
FROM Payment
WHERE year = (SELECT MAX(year) FROM Payment)
) p2
ON p1.year = p2.max_year AND
p1.mnth_num = p2.max_mnth;
Демо