[英]MySQL select row where one field is less than the previous record and one field is greater
我有两张桌子。 一个称为laps
的表,它保存了汽车在赛道上完成的所有圈数的记录,以及一个名为best_time
的表,其中包含该圈某些距离的最快时间。 例如,它将包含该圈中最快的 1k,或最快的半英里。
我想从这些表中选择每个距离最快的时间进展。 因此,它会随着时间的推移显示您在该圈上该距离的个人进步。 例如,您最快的 1k 可能是在 1 月份设置的,然后您在 6 月份和 8 月份再次打破它。 下面是best_times
表结构的样子
best_time_id int(10)
lap_id int(11)
start_time int(10)
end_time int(10)
total_distance decimal(7,2)
total_elapsed_time decimal(11,2)
我需要选择total_elapsed_time
小于前total_elapsed_time
记录且start_time
更大的记录。 到目前为止,这是我的查询
SELECT `bt`.`total_distance`, `bt`.`total_elapsed_time`, `bt`.`start_time`
FROM `best_times` AS `bt`, `laps` AS `l`
WHERE (
SELECT COUNT(*) FROM `best_times` AS `bt2`
WHERE `bt2`.`total_distance` = `bt`.`total_distance`
AND `bt2`.`total_elapsed_time` <= `bt`.`total_elapsed_time`
AND `bt2`.`start_time` > `bt`.`start_time`
) <= 10 AND `l`.`lap_id` = `bt`.`lap_id` AND `l`.`car_id` = 1 ORDER BY `bt`.`total_distance` ASC, `bt`.`total_elapsed_time` desc
这种工作但它选择了不应该的记录。 我回来的结果集的一个例子是这个
| total_distance | total_elapsed_time | start_time |
|----------------|--------------------|------------|
| 1000.00 | 99.15 | 1431344798 |
| 1000.00 | 98.25 | 1431604966 | This record shouldn't be here because although it's quicker it happened after the 91.40 time
| 1000.00 | 91.40 | 1431433535 |
我很接近,但谁能看到我哪里出错了。 如果我需要提供更多信息,请告诉我。
这将显示经过时间小于所有先前经过时间的所有行,按汽车 = 1 的总距离和圈数 id:
SELECT `bt`.`total_distance`, `bt`.`total_elapsed_time`, `bt`.`start_time`
FROM `best_times` AS `bt`, `laps` AS `l`
WHERE `bt`.`total_elapsed_time` <= (Select min(`bt2`.`total_elapsed_time`) from `best_times` AS `bt2` where `bt2`.`start_time` <= `bt`.`start_time`
AND `bt2`.`total_distance` = `bt`.`total_distance` )
AND `l`.`lap_id` = `bt`.`lap_id`
AND `l`.`car_id` = 1
ORDER BY `bt`.`total_distance` ASC, `bt`.`total_elapsed_time` desc
我不太确定什么是 lap_id,也许它可以被删除
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.