title: Selecting best row in each group based on two columns
body: <p>Suppose we have the following table, where each row represents a submission a user made during a programming contest, <code>id</code> is an auto-increment primary key, <code>probid</code> identifies the problem the submission was made to, <code>score</code> is the number of points the submission earned for the problem, and <code>date</code> is the timestamp when the submission was made. Each user can submit as many times as they want to the same problem:</p>
  
  <pre><code>+----+----------+--------+-------+------------+
  | id | username | probid | score |    date    |
  +----+----------+--------+-------+------------+
  |  1 | brian    |      1 |     5 | 1542766686 |
  |  2 | alex     |      1 |    10 | 1542766686 |
  |  3 | alex     |      2 |     5 | 1542766901 |
  |  4 | brian    |      1 |    10 | 1542766944 |
  |  5 | jacob    |      2 |    10 | 1542766983 |
  |  6 | jacob    |      1 |    10 | 1542767053 |
  |  7 | brian    |      2 |     8 | 1542767271 |
  |  8 | jacob    |      2 |    10 | 1542767456 |
  |  9 | brian    |      2 |     7 | 1542767522 |
  +----+----------+--------+-------+------------+
  </code></pre>
  
  <p>In order to rank the contestants, we need to determine the best submission each user made to each problem. The "best" submission is the one with the highest score, with ties broken by submission ID (i.e., if the user got the same score on the same problem twice, we only care about the earlier of the two submissions). This would yield a table like the following:</p>
  
  <pre><code>+----------+--------+----+-------+------------+
  | username | probid | id | score |    date    |
  +----------+--------+----+-------+------------+
  | alex     |      1 |  2 |    10 | 1542766686 |
  | alex     |      2 |  3 |     5 | 1542766901 |
  | brian    |      1 |  4 |    10 | 1542766944 |
  | brian    |      2 |  7 |     8 | 1542767271 |
  | jacob    |      1 |  6 |    10 | 1542767053 |
  | jacob    |      2 |  5 |    10 | 1542766983 |
  +----------+--------+----+-------+------------+
  </code></pre>
  
  <p>How can I write a query to accomplish this?</p>