2013-02-01 86 views
2

我有2個不同的表:
檔案(ID,姓名,DISP)
dossiers_etat(ID,id_dossier,開放,incharge,日期)如何從哪裏選擇最後一條記錄= x?

檔案很簡單,就是用自己的ID名稱的列表

dossiers_etat被鏈接到在卷宗的關係1-N:1個檔案可以連接到N卷宗-政變,得益於加入:dossiers.id = dossiers_etat.id_dossier

我使用dossiers_etat作爲時間軸記錄我檔案的每個狀態變化:1檔案今天可以打開=「Y」,但是打開=「N」唉
我能找到的關於一個檔案感謝dossiers_etat.date或dossiers_etat.id(最後日期和最後一個ID顯示最近的記錄)

我怎樣才能完成這個查詢的最後一條記錄有檔案的列表在他們的最後記錄中是否打開=「Y」並且incharge =「 - 」?

SELECT * 
FROM dossiers 
JOIN dossiers_etat 
ON dossiers.id = dossiers_etat.id_dossier 
WHERE dossiers.disp = "Y" AND dossiers_etat.open = "Y" AND dossiers_etat.incharge = "-" 
ORDER BY dossiers.id DESC 

非常感謝您的幫助!

+0

你可以在sqlfiddle.com上提供一些你的數據的例子嗎? – mvp

回答

1

試試這個:

SELECT * 
FROM dossiers B 
JOIN dossiers_etat as C 
ON B.id = C.id_dossier 
WHERE B.disp = "Y" AND C.open = "Y" AND C.incharge = "-" 
AND C.date = (SELECT max(date) from dossiers_etat WHERE id_dossier = C.id_dossier) 
ORDER BY B.id DESC 
+0

似乎工作!感謝Orangecrush! – jrm

+0

不客氣! :) – Orangecrush

1

試試這個

SELECT * 
FROM dossiers 
JOIN dossiers_etat 
ON dossiers.id = dossiers_etat.id_dossier 
WHERE dossiers.disp = "Y" AND dossiers_etat.open = "Y" AND dossiers_etat.incharge = "-" 
ORDER BY dossiers.id DESC 
limit 1 
+0

這將無法正常工作,因爲您只會獲取滿足where約束的最後一個條目。即使它不是現在正在使用的那個。 – Shimu

1

試試這個:

SELECT 
    * 
FROM 
    dossiers 
     JOIN 
    dossiers_etat ON dossiers.id = dossiers_etat.id_dossier 
WHERE 
    dossiers.disp = 'Y' 
     AND dossiers_etat.open = 'Y' 
     AND dossiers_etat.incharge = '-' 
     AND dossiers_etat.id = (SELECT 
      * 
     FROM 
      dossiers_etat 
     GROUP BY id_dossiers 
     ORDER BY date DESC) 
ORDER BY dossiers.id DESC; 

隨着子選擇,你會得到的ID從檔案表中的最後一個條目。並且在外部SELECT中,您將獲得所有打開正確條目並且也在最後記錄內的行。

+0

子查詢應該包含'select id_dossiers from ...'而不是'select * from ...'。 – Orangecrush

+0

您認爲這是比您的解決方案更好的解決方案嗎? – jrm

相關問題