mysql 选择组中的最新时间戳

1 mysql sql select group-by groupwise-maximum

我有一个表,我想为其选择由表中特定列的值定义的类别中的最新时间戳。

具体来说

SELECT * 
FROM   takelist 
WHERE  producer_name = 'sean' 
       AND bucket_id = '2CCEx15_1o' 
Run Code Online (Sandbox Code Playgroud)

结果是

+-------------+---------------+------------+---------------------+
| takelist_id | producer_name | bucket_id  | ts                  |
+-------------+---------------+------------+---------------------+
|           1 | sean          | 2CCEx15_1o | 2013-10-07 18:29:00 |
|           4 | sean          | 2CCEx15_1o | 2013-10-07 18:33:09 |
|           5 | sean          | 2CCEx15_1o | 2013-10-07 18:33:38 |
|          27 | sean          | 2CCEx15_1o | 2013-10-07 18:37:38 |
|         212 | sean          | 2CCEx15_1o | 2013-10-14 18:36:05 |
|         236 | sean          | 2CCEx15_1o | 2013-10-21 17:59:56 |
|         237 | sean          | 2CCEx15_1o | 2013-10-21 18:00:55 |
|         281 | sean          | 2CCEx15_1o | 2013-10-29 15:58:40 |
|         287 | sean          | 2CCEx15_1o | 2013-10-29 19:24:15 |
|         330 | sean          | 2CCEx15_1o | 2013-10-31 14:39:33 |
|         615 | sean          | 2CCEx15_1o | 2013-12-16 22:46:59 |
|         616 | sean          | 2CCEx15_1o | 2013-12-16 22:54:46 |
+-------------+---------------+------------+---------------------+
Run Code Online (Sandbox Code Playgroud)

我想为名为bucket_id 的列的每个唯一值选择一行,其中所选行具有最新的时间戳。

我根据以前对类似问题的回答尝试了以下内容,但一定有问题

SELECT takes.* FROM takelist as takes 
INNER JOIN (         
            SELECT takelist_id, max(ts) max_ts, bucket_id
            FROM takelist 
            WHERE producer_name='sean' 
            GROUP BY bucket_id
             ) latest_take
ON takes.takelist_id=latest_take.takelist_id
AND takes.ts=latest_take.max_ts 
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

您的查询已接近。但您使用的是 id 而不是时间戳:

SELECT takes.*
FROM takelist takes INNER JOIN
     (SELECT max(ts) as max_ts, bucket_id
      FROM takelist 
      WHERE producer_name = 'sean' 
      GROUP BY bucket_id
     ) latest_take
     ON takes.ts = latest_take.max_ts and takes.bucket_id = latest_take.bucket_id;
Run Code Online (Sandbox Code Playgroud)

takelist_id在原始公式中选择任意一个。而且它可能不是您想要的。