2

データを含むレコードを含むテーブルがあり、各レコードはカテゴリに属しています。次のようなテーブルがあるとしましょう。

ID | Category | Title    | Date
--------------------------------------
1  | Cat 1    | Ttl 1    | 2013-02-18
2  | Cat 2    | Ttl 2    | 2013-02-18
3  | Cat 1    | Ttl 3    | 2013-02-20

私がやりたいのは、カテゴリごとに1つの記事だけを取得することです。取得するのは、テーブルの最新の記事である必要があります。

より詳細には、結果は次のようになります。

ID | Category | Title    | Date
--------------------------------------
2  | Cat 2    | Ttl 2    | 2013-02-18
3  | Cat 1    | Ttl 3    | 2013-02-20

ご覧のとおり、カテゴリごとに1つのレコード(Cat1用とCat2用)が1つだけあり、Cat1のレコードの中で最新のものがあります。

MySQLクエリでそれをどのように変換できますか?

4

2 に答える 2

12
SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT Category, MAX(date) max_date
            FROM    tableName
            GROUP BY Category
        ) b ON a.category = b.category AND
                a.date = b.max_date

INDEXパフォーマンスを向上させるには、列に化合物を追加しますCategory, date

また

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT Category, MAX(ID) max_ID
            FROM    tableName
            GROUP BY Category
        ) b ON a.category = b.category AND
                a.ID = b.max_ID
于 2013-02-22T16:33:11.557 に答える
3

句を使用しWHEREてデータをフィルタリングできます。

select *
from yourtable t1
where (category, date) in (select category, max(date)
                           from yourtable t2
                           group by category)

SQL FiddlewithDemoを参照してください

于 2013-02-22T16:35:53.910 に答える