2016-09-30 47 views
2

我有兩個表。一張名爲laps的表格,記錄了一輛汽車在一個軌道上完成的所有圈數以及一張名爲best_time的表格,該表格包含該圈中特定距離上的最快時間。例如,它將包含該圈中最快的1k,或最快的半英里。MySQL選擇行,其中一個字段小於前一個記錄,一個字段更大

我想從這些表中選擇每個距離的最快時間進度。所以它會隨着時間的推移顯示你在那一圈的距離上的個人進展。例如,你最快的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低於此前的紀錄和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

這將顯示小於以往所有經過時間,其中經過時間所有的行,通過汽車= 1的總距離和圈ID:我也不太清楚什麼是lap_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 

,也許它可以刪除

+0

感謝您的毅力:)這是我所需要的,通過解決方案閱讀是有道理的 – Pattle

+0

不客氣,很高興我們解決了它到底! – Jayvee

相關問題