2012-08-31 48 views
0

我有一個包含新聞帖子的表,並且希望獲得每個類別的最後添加的newspost
該表包含這些列:獲取每個類別中列的最大值的整行

  • ID,標題,圖片,描述,類別,日期

例如:我有3類20個職位。每個類別日期的最後一篇文章被返回,所以我得到3篇文章。

回答

0

認爲這樣做的最小,最可用的解決方案是一個:

SELECT * FROM ( 
    SELECT * FROM table ORDER BY date DESC 
) as t 
GROUP BY t.category; 

的另一種方法將與子查詢具有羣組...

@eggyal: 由於rdbms的內部排序順序,這將使用最後插入的max_date ...

+0

1. group by受傳入集在mysql中的順序的影響... - 在指出之前進行測試運行.. 2.所有列受到組的影響 - 這是組合的目的;你按類別分組,它將使用組中的第一個「子結果」來顯示,在這種情況下:最後一個newspost ... 3.我已經測試過了 - 這很簡單,但如果你真的想要撞擊解決方案,我會添加一個... – TheHe

+0

此行爲不能被依賴。正如[手冊](http://dev.mysql.com/doc/en/group-by-hidden-columns.html)所說:「*服務器可以自由選擇每個組的任何值,因此除非它們是同樣,選擇的值是不確定的。「」 – eggyal

+0

http://stackoverflow.com/questions/7114173/order-by-subquery-for-group-by-to-join-conversion – TheHe

1

你想要groupwise maximum

SELECT newsposts.* FROM newsposts NATURAL JOIN (
    SELECT category, MAX(date) AS date FROM newsposts GROUP BY category 
) t 
+0

不是實際上將返回正確的結果...... 它會按類別組,但不會選擇「標題,圖片,描述和ID」爲相應的MAX(日)... 它只會變得在組中的正確DATE ... – TheHe

+0

@TheHe:Err,這就是子查詢將執行的操作...父查詢然後將'newsposts'表與該子查詢連接以獲得其餘列。 – eggyal

+0

哦,是啊!你完全正確... 但是...當同一天和類別有兩個newspost時,BOTH將會顯示;) – TheHe

相關問題