2013-05-30 99 views
0

我有一個類似的問題the one solved here,但是當我試圖解決我想是因爲我有事情設置了不同的失敗..查找列的最大值,然後組在同一個表的另一列

我有... 一個文檔表(表遺憾的是不能被修改,因爲它有一箇舊系統)

+-------+--------+----------+--------+ 
| Docid | title | revision | linkid | 
+-------+--------+----------+--------+ 
| 1  | docone | 1  | 1  | 
| 2  | doctwo | 1  | 2  | 
| 3  | docone | 2  | 1  | 
|4  | docone | 3  | 1  | 
+-------+--------+----------+--------+ 

在一個頁面上,列出了所有我想只列出每個文件的最新版本的文件。 Doc1例如在修訂版本3上,所以我想要那個而不是其他版本。Doc2只在修訂版本1上,所以表明一個。

根據在其他文章中,我已經writen我的查詢如下問題......

$query_docs = " 
    SELECT `document`.*, doctype.* 
    FROM `document` 
    INNER JOIN doctype  
     ON `document`.iddoctypes = doctype.iddoctypes 
    WHERE `document`.revision = (
     SELECT MAX(`document`.revision) AS revision 
     FROM `document` 
    ) 
    GROUP BY `document`.linkid 
    ORDER BY `document`.doccreation DESC"; 

我不得不鏈接到另一個表來獲取文檔類型(只是爲了讓查詢更難)。

+0

如果您先嚐試從文檔表中獲得想要的內容,然後再擔心從doctype中添加額外的細節,可能會更容易。 – nurdglaw

+0

是簡單地將內部聯接重新排序到子查詢的括號之後? –

+0

不是真的;更多的是你試圖解決一個問題,從'document'表中獲取一些數據。我建議你把注意力集中在這一點上,並且不要擔心在額外的數據表中添加額外的表格,除非你已經弄清楚瞭如何從'document'表格中獲得你想要的數據。 – nurdglaw

回答

0

試試這個,我做了幾個細微的變化

SELECT document.*, doctype.* 
FROM document 
INNER JOIN doctype  
    ON document.iddoctypes = doctype.iddoctypes 
WHERE document.revision = (
    SELECT MAX(d1.revision) 
    FROM document d1 
    WHERE document.linkid = d1.linkid 
) 
ORDER BY document.doccreation DESC 
+0

謝謝菲爾,但我認爲我應該提到標題可以改變,但linkid不能。 –

+0

@DanielRobinson我改變了它,以便抓取基於'linkid'而不是'title'的數據。它應該按預期工作(我希望!) –

+0

對不起,延遲迴復。非常感謝你的解決方案。我可以問一些問題嗎?我不明白文檔d1中的一行。你是否將文檔表的名稱更改爲d1?那裏有一些信息我可以讀到你做了什麼? –

0

只是一個瘋狂的猜測:我認爲你必須在你的(select max(...) ...)子查詢中添加group by title

所以完整的聲明將是這樣的:

$query_docs = " 
SELECT `document`.*, doctype.* 
FROM `document` 
INNER JOIN doctype  
    ON `document`.iddoctypes = doctype.iddoctypes 
WHERE `document`.revision = (
    SELECT MAX(`document`.revision) AS revision 
    FROM `document` 
    --GROUP BY `document`.title 
    GROUP BY `document`.linkid 
) 
GROUP BY `document`.linkid 
ORDER BY `document`.doccreation DESC"; 
+0

不幸的是,標題可能會根據每個修訂版而改變。唯一總是相同的是linkid –

+0

然後我的提示是用「group by linkid」替換「group by title」。我分別編輯了我的帖子。 –

0

難道我失去了一些東西?這看起來很簡單...

SELECT x.* 
    FROM my_table x 
    JOIN (SELECT title,MAX(revision) max_revision FROM my_table GROUP BY title) y 
    ON y.title = x.title 
    AND y.max_revision = x.revision; 
相關問題