Consider the following…
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,userid INT NOT NULL
,date DATE NOT NULL
,score INT NOT NULL
,UNIQUE(userid,date)
);
INSERT INTO my_table (userid,date,score) VALUES
(1,'2017-09-30',1),
(1,'2017-10-01',1),
(2,'2017-10-01',2),
(1,'2017-10-02',2),
(2,'2017-10-02',2),
(3,'2017-10-02',1);
SELECT x.*
, COUNT(DISTINCT y.score) rank
FROM my_table x
JOIN my_table y
ON y.date = x.date
AND y.score >= x.score
GROUP
BY x.date,x.userid
HAVING rank = 1 AND userid = 1;
+--------+------------+-------+------+
| userid | date | score | rank |
+--------+------------+-------+------+
| 1 | 2017-09-30 | 1 | 1 |
| 1 | 2017-10-02 | 2 | 1 |
+--------+------------+-------+------+
or
SELECT x.*
FROM my_table x
JOIN my_table y
ON y.date = x.date
AND y.score >= x.score
GROUP
BY x.date,x.userid
HAVING userid = 1
AND COUNT(DISTINCT y.score) = 1;
4
solved mysql return date by top position