LoginSignup
0
1

More than 3 years have passed since last update.

[MySQL]1対多のテーブル構造でgorup byで取得する時に最新のレコードをJOINしたい

Posted at

テーブル構造

order_settlementテーブル

id order_id settlement_id created_at
1 1 1 2020-12-01 12:22:54
2 1 2 2020-12-02 20:15:46
3 2 3 2020-12-02 23:22:51

orderテーブル

id order_number
1 A2012020001
2 A2012020002

settlementテーブル

id amount_jpy
1 200
2 300
3 500

1つの注文番号(order)に対して、複数の決済情報(order_settlement)が存在する状態。最新の決済情報をJOINして注文情報と一緒に取得したい場合。

取得したい形

order_number settlement_id amount_jpy created_at
A2012020001 2 300 2020-12-02 20:15:46
A2012020002 3 500 2020-12-02 23:22:51

SQL

where句でidを指定する際にサブクエリを使用し、同order_idを持つorder_settlementレコードの中で、idが一番大きい値が取得されるよう指定している。maxは指定列の最大値を求める関数。

SELECT
    o.order_number,
    os.settlement_id,
    s.amount_jpy,
    os.created_at
FROM
    order_settlement os
    INNER JOIN
        settlement s
    ON  s.id = os.settlement_id
    INNER JOIN
        order o
    ON  o.id = os.order_id
WHERE
    os.id IN(
        SELECT
            MAX(id)
        FROM
            order_settlement os2
        WHERE
            os2.order_id = o.id
    )
GROUP BY
    o.id
;
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1