2017-03-22 11 views
-1

私はMySQL 5.7で動作します。私は各カテゴリの最後の記事のIDとタイトルを取得したいと思います。MySQL 5.7 - クエリで最大値とグループのIDを取得する方法は?

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

私はこの要求をしようと試みてきたが、それは動作しません:

SELECT id, title, MAX(date), fk_category 
FROM article 
GROUP BY fk_category 
ORDER BY date DESC 
私は結果があることを期待し、この例

| 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  | 

:たとえば、私は、次の表「条」を持っています

どのようなクエリを使用する必要がありますか?

PS:私は唯一の方法は何か、バックテーブルに参加することであるONLY_FULL_GROUP_BY SQLモードに

答えて

2

、および現在のクエリが実行されていた場合、正しい結果が得られない可能性があります。また、ほとんどの他のデータベースにクエリを移植することはできません。より良いアプローチは、各カテゴリの最新の日付を検出するサブクエリを使用することです。次に、このサブクエリに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

を無効にしたくない:あなたはMySQLのONLY_FULL_GROUP_BYモードを無効にすることであったとしても

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 ID、MAX日付など(日)、idがGROUP BY内名前が付いていないので、fk_category' BY記事 グループから fk_categoryはONLY_FULL_GROUP_BY SQLモードを持つサーバー上で失敗します。 –

関連する問題