一
NOT EXISTS
带有相关子查询的condition可以做到这一点,比如:
SELECT *
FROM temp_laptimes t
WHERE NOT EXISTS (
SELECT 1
FROM temp_laptimes t1
WHERE t1.lap_date < t.lap_date AND t1.laptime < t.laptime
)
这个
不存在
条件确保没有先前记录的圈数时间更短。
Demo on DB Fiddlde
:
| lap_id | driver | laptime | lap_date |
| ------ | ------ | ------- | ---------- |
| 1 | Dean | 56.8 | 2019-01-01 |
| 33 | Carl | 56.1 | 2019-03-01 |
| 61 | Bob | 55.9 | 2019-06-01 |
| 84 | Anne | 55.7 | 2019-08-01 |
如果您使用的是mysql 8.0,另一种可能更有效的方法是在子查询中使用窗口函数计算当前记录和正在处理的记录的最小圈时间。然后,外部查询筛选出最小值等于当前圈时间的记录:
SELECT *
FROM (
SELECT
t.*,
MIN(laptime) OVER(ORDER BY lap_date) min_lap_time
FROM temp_laptimes t
) x WHERE laptime = min_lap_time;
Demo on DB Fiddle
(同样的结果)。