-2

私はこのようなテーブルを持っています:

type       | date       | id
-----------------------------
1          | 2012-01-01 | 1
2          | 2012-01-01 | 2
1          | 2012-02-02 | 3
2          | 2012-02-02 | 4

タイプの「最新の」個別の値をすべて選択するクエリを作成する必要があります(この例では、IDが3と4のレコードになります)。今私はこの解決策を持っています:

select * from test t1 where date = 
(select max(date) from test t2 where t2.type = t1.type ) order by type, date desc

ネストされたselectの存在に戸惑っていますが、もっとエレガントな解決策があるのではないでしょうか。

4

2 に答える 2

3

使用している RDBMS について言及していないので、これを試してください。ほとんどの RDBMS で動作します。

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  type, MAX(DATE) maxDAte
            FROM tableName
            GROUP BY type
        ) b ON a.type = b.type AND
                a.DATE = b.maxDate

またはRDBMSがサポートしている場合Window Function

SELECT type, date, id
FROM
(
    SELECT type, date, id,
            ROW_NUMBER() OVER (PARTITION BY type
                                ORDER BY date DESC) rn
    FROM tableNAme
) s
WHERE rn = 1
于 2012-11-28T14:46:19.430 に答える
1

あなたの特定の例では、これも機能します:

select type, max(date), max(id)
from your_table
group by type

ただし、日付と ID が常に増加していることが確実な場合にのみ機能することに注意してください。そうでない場合は、2 つの異なる行にある可能性がありますmax(date)max(id)これは、自分が何をしているのかわかっている場合にのみ使用してください。そうでない場合は、ネストされたクエリに問題はありません。

于 2012-11-28T14:58:34.577 に答える