2012-11-09 49 views
3

我有正常工作的情況如下:從左外返回一行加入

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),因此多到一的關係如果r有多行,則上面的查詢返回r中每個倍數的行。
如果MIN(r.remarks_date)存在倍數,我只想從r返回一行。 r.remarks_date是日期字段。

在此先感謝!

回答

9

事情是這樣的:

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' 
+0

感謝a_horse_with_no_name – indianapolymath