2010-01-22 158 views
6

這裏是我的表如何訂購,團體,訂單與MySQL

tbl_records 
-title 
-created 
-views 

我想知道我怎樣才能使他們由標題分組查詢的簡化版本,但返回備案每個組是最近創建的。然後我會通過意見來訂購它。

我猜想的一種方法是做一個子查詢,並通過創建進行排序,然後按標題對其進行分組,然後從這些結果按視圖排序。我想有更好的方法。

感謝

編輯:

示例數據:

-title: Gnu Design 
-created: 2009-11-11 14:47:18 
-views: 104 

-title: Gnu Design 
-created:2010-01-01 21:37:09 
-views:9 

-title: French Connection 
-created:2010-05-01 09:27:19 
-views:20 

我想結果是:

-title: French Connection 
-created:2010-05-01 09:27:19 
-views:20 

-title: Gnu Design 
-created:2010-01-01 21:37:09 
-views:9 

只有最recen t Gnu Design顯示,然後結果按視圖排序。

+1

如果您有樣本數據,它會更清晰。 – Yada 2010-01-22 19:06:17

+0

是的,請澄清一下問題。 – 2010-01-22 19:07:42

回答

3

這是在StackOverflow上經常出現的greatest-n-per-group問題的一個示例。

這是我通常的解決辦法:

SELECT t1.* 
FROM tbl_records t1 
LEFT OUTER JOIN tbl_records t2 ON (t1.title = t2.title AND 
    (t1.created < t2.created OR t1.created = t2.created AND t1.primarykey < t2.primarykey)) 
WHERE t2.title IS NULL; 

說明:找到沒有其他行t2具有相同title和更大created日期存在的行t1。在綁定的情況下,使用一些獨特的鍵來解決平局,除非可以根據title獲得多個行。

1
select i.*, o.views from 
    (
     select 
     title 
     , max(created) as last_created 
     from tbl_records 
     group by title 
    ) i inner join tbl_records o 
    on i.title = o.title and i.last_created = o.created 
    order by o.views desc 

我假設聚集被應用到viewscount(),但很可能是錯誤的(你需要有一些定義方式,你希望有創建的最新的這些意見措施標題)。希望有所幫助。

編輯:已經看過您的樣本數據並進行相應編輯。

0
SELECT title, 
     MAX(created), 
     views 
FROM table 
GROUP BY title 
ORDER BY views DESC