2010-11-19 25 views
2

我的數據庫(MySQL的)有2個表SQL SELECT,獲取最新的每節車廂進入

表1 - 每個汽車

汽車= ID(INT)的紀錄,REG(INT)類型(INT)

表2 - 包含工作每輛車

工作= ID(INT),日期(日期)

我需要一個SELECT命令,這將讓我最近的工作全部ID的

在此先感謝。

+0

那是整個數據庫嗎?還是你爲我們簡化它?如果你有工作......和一輛車......他們需要以某種方式相關...... – WernerCD 2010-11-19 05:20:55

回答

4

您沒有共享領域,你不能做到這一點。您需要爲每個作業存儲關聯的car_id,或者有一個jobs_to_cars表。

然後你會使用:

SELECT C.*, J.id, MAX(J.date) 
FROM cars C 
INNER JOIN jobs J on J.car_id = C.id 
GROUP BY C.id 

如果作業的ID作爲汽車的ID,然後更改j.car_id到j.id相同,但隨後你會缺乏喬布斯的主鍵,這是我建議你開始製作。

+0

這不行。 – zerkms 2010-11-19 01:26:43

+0

MySQL錯誤1111:使用組函數 – 2010-11-19 01:27:55

+0

無法使用max或join?我解釋了爲什麼連接不工作,我沒有時間測試最大值。如果你需要在那裏找到第二個查詢,或者選擇最大,然後使用它。 – 2010-11-19 01:28:11

0

您可以嘗試

ORDER BY date DESC 
1
SELECT * 
     FROM cars c 
INNER JOIN (SELECT MAX(id) AS j_id 
       FROM jobs 
      GROUP BY car_id) x ON x.j_id = c.id 
  1. 你忘了jobs.car_id場,指定哪輛車的工作屬於
  2. 更優雅的方式是創建領域car.last_job_id,並觸發維持它jobs表。

因爲你的問題是不明確的,這個查詢也可以是一個答案:

SELECT j.* 
     FROM jobs j 
INNER JOIN (SELECT MAX(id) id 
       FROM jobs 
      GROUP BY car_id) x ON x.id = j.id 
+0

它很好,你認爲他忘了jobs.car_id ...我認爲沒有可以連接的領域......兩者都是危險的假設。我不認爲添加一個字段會是我認爲優雅的... – WernerCD 2010-11-19 05:21:32

2

你可以使用類似這樣

SELECT c.*, MAX(j.date) date 
FROM cars c 
    LEFT JOIN jobs j ON j.id = c.id 
GROUP BY c.id 
ORDER BY c.id 

,因爲你沒有在其他領域[工作]。如果一輛汽車沒有任何工作,日期將爲空。