2015-04-17 85 views
1

我有兩張桌子。一個與市政府(wsjg_mun)和另一個與項目(wsjg_proj)。我需要每個城市的最近一年(yr)和項目(proj_id)。最近一年和每個城市的項目

Table wsjg_mun (municipalities) 

    pol_id (hash version of municipality name) 
    mun (municipality name) 
    cbs_cde 
    cbs_id (municipality id, PK) 

Table wsjg_proj (projects) 

    cbs_id (municipality id) 
    yr (year project) 
    edition 
    proj_id (project) 
    lud 

這個查詢

SELECT a.pol_id, a.mun, a.cbs_cde, a.cbs_id, yr, b.edition FROM wsjg_proj b 
LEFT JOIN wsjg_mun a 
ON a.cbs_id = b.cbs_id 
GROUP BY b.cbs_id, b.yr 
ORDER BY b.cbs_id , b.yr asc 

結果:

Bedum  2010 BP 
Bedum  2011 BR 
Bedum  2014 BP 
Ten Boer 2011 BR 
Ten Boer 2013 BP 

我想有

Bedum  2014 BP 
Ten Boer 2013 BP 

回答

1

我覺得這樣的查詢將是有益的:

SELECT a.mun, b.yr, b.edition 
FROM wsjg_mun a 
    LEFT JOIN wsjg_proj b ON a.cbs_id = b.cbd_id 
WHERE b.yr = (
     SELECT Max(bi.yr) 
     FROM wsjg_proj bi 
     WHERE bi.cbs_id = b.cbs_id) 
1

你爲榜樣不匹配所提供的輸出查詢,但無論如何,我會想什麼y你正在尋找的東西是這樣的:

select a.mun, b.edition, b.yr 
from wsjg_mun a 
join wsjg_proj b on a.cbs_id = b.cbs_id 
join (
    select cbs_id, max(yr) as max_yr 
    from wsjg_proj 
    group by cbs_id 
) max_proj_yr on b.cbs_id = max_proj_yr.cbs_id and max_proj_yr.max_yr = b.yr 

用作派生表的查詢確定每個cbs_id的最新年份。