50157

[code]

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

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


CC BY-SA 4.0
2018-11-10T06:33:57.987
50156
2018-11-21T07:59:32.083
2018-11-10T07:17:41.123
754
24431
question
sql
SQLで、列Xの値がnのときの、列Yの値が最大の行を求めたい。


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

[code]

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

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


CC BY-SA 4.0
2018-11-10T06:57:36.380
50157
2018-11-10T06:57:36.380
4236
50156
answer


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


CC BY-SA 4.0
2018-11-10T07:29:00.320
50158
2018-11-10T07:29:00.320
754
50156
answer