2013-06-23 55 views
0

我被困在試圖解決其他複雜JOIN的一小部分。在同一列上加入同一個表,其中不同的值只返回最近一行

我們有'說明'表和'估計'表。在'估計'中,我們有多行用於給定指令的不同估計類型。

指令表

id | address | status 
1 | 27 TAYLOR ROAD, ALBION PARK NSW 2527 | InProgress 

估算表

id | instruction_id | basis | basis_date | basis_value 
1 | 1 | ContractPrice | 2012-04-05 | 124000 
2 | 1 | CAMV | 2012-02-01 | 120000 
3 | 1 | CustomerEstimate | 2012-06-07 | 132000 
4 | 1 | ContractPrice | 2013-01-03 | 140000 
5 | 1 | CustomerEstimate | 2013-02-09 | 145000 

我們要的其實是2的 '指令' 基於instructions.id = estimates.instruction_id和estimates.basis '估計' 加入1)最近的'客戶評估'(別名basis_date和basis_value爲estimate_date和estimate_value)以及2)最近的'ContractPrice'(同樣,將basis_date和basis_value作爲contact_date和contract_value進行別名)。

預期結果如下;

id | address | status | contract_price | contract_date | estimate_date | estimate_value 
1 | 27 TAYLOR ROAD, ALBION PARK NSW 2527 | InProgress | 2013-01-03 | 140000 | 2013-02-09 | 145000 

我真的很感謝來自SQL專家的一些幫助。

+1

歡迎#1。既然這不僅僅是一個代碼寫作服務,你已經做了什麼? – mzedeler

回答

1

這應該工作:

SELECT * 
FROM 
(
    SELECT i.id, i.address, i.status, 
     co.basis_value As contract_price, 
     co.basis_date As contract_date, 
     es.basis_date As estimate_date, 
     es.basis_value As estimate_value, 
     ROW_NUMBER() OVER(Partition By i.id Order By co.basis_date, es.basis_date) As RN 
    FROM  instructions As i 
    INNER JOIN estimates As co ON (i.id = co.instruction_id AND co.basis = 'ContractPrice') 
    INNER JOIN estimates As es ON (i.id = es.instruction_id AND es.basis = 'CustomerEstimate') 
) As a 
WHERE RN = 1 
相關問題