2017-03-22 97 views
-1

我在MySQL 5.7上工作,我想獲取每個類別的最後一篇文章的ID和TITLE。例如,我有如下表「文章」:MySQL 5.7 - 如何獲得最大值的id和查詢組?

| ID | TITLE | DATE  | FK_CATEGORY | 
| 1 | title 1 | 2016-10-05 |  1  | 
| 2 | title 2 | 2017-10-02 |  1  | 
| 3 | title 3 | 2015-10-10 |  2  | 
| 4 | title 4 | 2017-04-20 |  2  | 
| 5 | title 5 | 2017-04-12 |  3  | 

在這個例子中我希望得到的結果是:

| 2 | title 2 | 2017-10-02 |  1  | 
| 4 | title 4 | 2017-04-20 |  2  | 
| 5 | title 5 | 2017-04-12 |  3  | 

我已經tryed這個請求,但它不工作:

SELECT id, title, MAX(date), fk_category 
FROM article 
GROUP BY fk_category 
ORDER BY date DESC 

我必須使用什麼查詢?

PS:我不想禁用ONLY_FULL_GROUP_BY SQL模式

回答

2

即使你禁用MySQL的ONLY_FULL_GROUP_BY模式,您當前的查詢將運行,它可能不會產生正確的結果。此外,您將無法將查詢移植到大多數其他數據庫。更好的方法是使用可以找到每個類別的最近日期的子查詢。然後,將article加入此子查詢以獲取所需的結果集。

SELECT t1.* 
    FROM article t1 
    INNER JOIN 
    (
     SELECT FK_CATEGORY, MAX(DATE) AS MAX_DATE 
     FROM article 
     GROUP BY FK_CATEGORY 
    ) t2 
     ON t1.FK_CATEGORY = t2.FK_CATEGORY AND 
      t1.DATE  = t2.MAX_DATE 
    ORDER BY date DESC 
0

的唯一辦法就是加入表背,像:

select a.id, a.date, a.title, a.fk_category 
from article a 
join 
(
SELECT id, MAX(date) as date, fk_category 
FROM article 
GROUP BY fk_category 
) x using (id, date, fk_category) 
ORDER BY a.date DESC; 
+0

'SELECT標識,MAX(日期)日期,fk_category 從第 GROUP BY fk_category'將與ONLY_FULL_GROUP_BY SQL模式服務器失敗,因爲ID不是GROUP BY內命名 –