Những thứ như thế này nên làm:-
SELECT a.Name, GROUP_CONCAT(YEAR(DATE_ADD(a.start_date, INTERVAL b.aNum YEAR))) AS activity_years
FROM person a
CROSS JOIN (SELECT a.i + b.i * 10 AS aNum FROM integers a, integers b) b
WHERE YEAR(DATE_ADD(a.start_date, INTERVAL b.aNum YEAR)) <= YEAR(a.end_date)
GROUP BY a.Name
Nó dựa vào một bảng các số nguyên với một cột được gọi là i, với các giá trị từ 0 đến 9. Nó kết hợp điều này với chính nó để nhận một phạm vi số từ 0 đến 99, do đó, đối phó với các phạm vi ngày cách xa nhau.
Xóa các lựa chọn con để sử dụng nó trong một chế độ xem
SELECT p.Name, GROUP_CONCAT(YEAR(DATE_ADD(p.start_date, INTERVAL (a.i + b.i * 10) YEAR))) AS activity_years
FROM person p
CROSS JOIN integers a
CROSS JOIN integers b
WHERE YEAR(DATE_ADD(p.start_date, INTERVAL (a.i + b.i * 10) YEAR)) <= YEAR(p.end_date)
GROUP BY p.Name