2010-04-17 21 views
1

我的概率:使用mysql我需要檢索哪些插入最後在每個類別

我有兩個表即類別和產品。

表:類別

id  category 

1  cat1 

2  cat2 

3  cat3 

4  cat4 

表:產品

id productName category 

1 test1   1 

2 test2   2 

3 test3   3 

4 test4   4 

5 test5   2 

6 test6   2 

我的概率是:

我需要的是插入最後在每一個類別的產品。

如何解決這個問題。

在此先感謝

回答

0

您可以添加一個create_time時間戳,當一個新的已添加產品,並按類別檢索最新版本:

select max(create_time),category from product group by category 
+0

無法爲「GROUP BY類別」選擇'productName',因爲產品名稱對類別沒有功能依賴性。您將從類別中獲得任意產品名稱,但不一定與create_time與MAX(create_time)匹配的產品相同。在其他數據庫軟件和ANSI SQL:92中,這只是一個錯誤。 – bobince 2010-04-17 10:56:47

+0

感謝堆垛機,得到它 – Fero 2010-04-17 12:03:26

+0

@bobince謝謝我修復它 – stacker 2010-04-17 17:10:15

0

這是問這裏最常見的SQL的問題之一,每組最大的變化。見例如。 this question適用於各種方法。

一個我經常使用的是空自左加入,選擇具有它上面沒有值的行:

SELECT p0.* 
FROM product AS p0 
LEFT JOIN product AS p1 ON p1.category=p0.category AND p1.id>p0.id 
WHERE p1.id IS NULL 

這是假設id s的爲了分配使最高的是最近的。通常,依靠身份作爲排序機制並不是一個好主意;您通常會將added時間戳添加到每行來處理。

(請注意,如果兩行具有相同的順序列,那麼許多其他每個組的最大函數可能會返回多個行;如果這是個問題,則可以通過使用UNIQUE排序列來避免;作爲主鍵id你可以得到一行,即使有兩個最大值使用SQL:2003的有用但相當醜陋的ROW_NUMBER() OVER窗口函數,但這不被MySQL支持)。