4

私はうまくいく次のものを持っています:

SELECT mcr.mat_change_req_id, mcr.line_item_number
    , r.remarks, r.remarks_date
FROM mat_change_req mcr
    left outer join mat_change_req_remarks r ON mcr.mat_change_req_id = r.mat_change_req_id
WHERE mcr.contract_id = 'IR-30910'
    AND
    mcr.project_number = '0801082'

問題は、テーブルmat_change_req_remarks(r)がmat_change_req(mcr)と多対1の関係にあるため、rに複数の行がある場合、上記のクエリはrの各倍数の行を返すことです。
MIN(r.remarks_date)が複数ある場合は、rから1行だけを返したいと思います。r.remarks_dateは日付フィールドです。

前もって感謝します!

4

1 に答える 1

11

このようなもの:

SELECT mcr.mat_change_req_id, 
       mcr.line_item_number, 
       r.remarks, 
       r.remarks_date
FROM mat_change_req mcr
    left outer join (
      select mat_change_req_id, 
             remarks,
             remarks_date,
             row_number() over (partition by mat_change_req_id order by remarks_date) as rn
      from mat_change_req_remarks
    ) r ON mcr.mat_change_req_id = r.mat_change_req_id and r.rn = 1
WHERE mcr.contract_id = 'IR-30910'
  AND mcr.project_number = '0801082'
于 2012-11-09T14:40:47.613 に答える