0

人の名前、1マイルを走るのにかかった時間、およびその1マイルを走ったときに、その人の最新のラップタイムを取得するための最良の方法を保存したテーブルがある場合。

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 に答える