SQLで、列Xの値がnのときの、列Yの値が最大の行を求めたい。

[code]

    select * from A where X=n and Y = ( select max(Y) from A where X=n);
    
[/code]

でいいでしょうか？  
これですと、`where X=n`が２か所にあり、もっと簡潔な、あるいは分かりやすい書き方はないでしょうか？




「最大値」を「大きい順に並べた際の先頭の１つ」と考えるとシンプルに書けます。

[code]

    SELECT TOP(1) *
    FROM A
    WHERE X=n
    ORDER BY Y DESC
    
[/code]

ただし該当行が複数存在する場合は正しい結果が得られません。




@sayuri さんがおっしゃっているように、並べ替えて最初の行のみを取得する、が良さそうです。ただ、この「最初の行だけを取得する」は rdbms によって
SQL の書き方が違います。

参考までに:

[code]

    -- MS SQL Server, など
    SELECT TOP(1) *
    FROM A
    WHERE X=n
    ORDER BY Y DESC;
    
    -- MySQL, PostgreSQL など
    SELECT *
    FROM A
    WHERE X=n
    ORDER BY Y DESC
    LIMIT 1;
    
    -- ANSI/ISO SQL:2008, DB2 など
    SELECT *
    FROM A
    WHERE X=n
    ORDER BY Y DESC
    FETCH FIRST 1 ROWS ONLY;
    
[/code]

