0

如果我有一张存储一个人姓名的表格,他们跑一英里所用的时间,以及当他们跑一英里时,获取一个人最近一圈时间的最佳方法是什么。

LAPS
____________________________________________
|  name   | lap_time |        date         |
--------------------------------------------
| George  |   20.3   | 2013-01-17 09:17:14 |
| Alex    |   32.2   | 2013-02-17 14:24:32 |         
| Mike    |   16.6   | 2013-01-17 07:57:54 |
| Alex    |   28.5   | 2013-01-17 19:50:21 |
| Mike    |   15.1   | 2013-02-17 12:37:12 |
| Mike    |   14.8   | 2013-03-17 06:58:34 |
''''''''''''''''''''''''''''''''''''''''''''

我一直在这样做,到目前为止它对我有用,但我很想知道是否有更好的方法。

SELECT l.lap_time
FROM laps l
INNER JOIN(
    SELECT *, MAX(date) as most_recent
    FROM laps
    WHERE name = 'Alex'
)AS temp ON (
    l.date = temp.most_recent
    AND l.name = temp.name
)

我使用这种类型的查询的实际表很大,所以我正在寻找最省时的方法。

4

2 回答 2

1

我会用这个查询和 MAX 来测试它,看看哪个更快。

Select * from laps where name = 'Alex' order by date desc limit 1;
于 2013-01-17T18:25:40.650 回答
1

这将适用于单个名称:

SELECT name, lap_time, date
FROM laps
WHERE name = 'Alex'
ORDER BY date DESC
LIMIT 1

结果

| 姓名 | LAP_TIME | 日期 |
-------------------------------------------------- ---
| 亚历克斯 | 32.2 | 2013 年 2 月 17 日 14:24:32+0000 |

查看演示

这应该适用于所有名称:

SELECT a.name, b.lap_time, a.date
FROM
  (SELECT name, MAX(date) AS date FROM laps GROUP BY name) a
LEFT JOIN laps b 
  ON b.date = a.date AND b.name = a.name

结果

| 姓名 | LAP_TIME | 日期 |
-------------------------------------------------- -----
| 亚历克斯 | 32.2 | 2013 年 2 月 17 日 14:24:32+0000 |
| 乔治 | 20.3 | 2013 年 1 月 17 日 09:17:14+0000 |
| 迈克 | 14.8 | 2013 年 3 月 17 日 06:58:34+0000 |

查看演示

于 2013-01-17T18:20:08.530 回答