OK, I think I have the answer. Please check this:
SELECT tbl.ID, tbl.UID, tbl.MUSIC, tbl.DATE
FROM tbl
INNER JOIN
(
SELECT MUSIC,
Substring_index(Substring_index(gdate, ',', 2), ',', -1) AS sec_date
FROM (SELECT MUSIC ,
GROUP_CONCAT(DATE order by DATE desc separator ",") AS gdate
FROM tbl
GROUP BY MUSIC) t1
) AS tbl2
ON tbl.MUSIC=tbl2.MUSIC
AND tbl.DATE=tbl2.sec_date
First of all I've created GROUP_CONCAT on DATE, ordered by desc, so I can use Substring_index
to get the second DATE
, and of course, grouped everything by MUSIC,
so the dates are grouped for respective MUSIC category.
Then I wrote the actual query to get the results, with join to derived table so I ensure that I get correct row for that particular MUSIC
AND DATE
.
And here's the SQLFiddle
UPDATE
If you want to filter further by UID, just add WHERE
to inner query, like this:
SELECT tbl.ID, tbl.UID, tbl.MUSIC, tbl.DATE
FROM tbl
INNER JOIN
(
SELECT MUSIC,
Substring_index(Substring_index(gdate, ',', 2), ',', -1) AS sec_date
FROM (SELECT MUSIC ,
GROUP_CONCAT(DATE order by DATE desc separator ",") AS gdate
FROM tbl
WHERE UID=1 -- add filter here
GROUP BY MUSIC) t1
) AS tbl2
ON tbl.MUSIC=tbl2.MUSIC
AND tbl.DATE=tbl2.sec_date
and updated SQLFiddle