我想用多張表單LEFT JOIN出一個VIEW
但是VIEW出來的結果如果有重複 只想顯示一筆(顯示日期最新的一筆)
請問SQL(MySQL資料庫)該如何下?
表1
| PN | OWNER | 
|---|---|
| A | 王小明 | 
| B | 陳小花 | 
| C | 李小賢 | 
| D | 黃小美 | 
表2
| PN | Date | 
|---|---|
| A | 2018-1-1 | 
| A | 2018-2-1 | 
| A | 2018-3-1 | 
| B | 2018-1-1 | 
| B | 2018-2-1 | 
| D | 2018-7-30 | 
| D | 2018-8-30 | 
| E | 2018-9-15 | 
| F | 2018-10-15 | 
預期結果
| PN | OWNER | Date | 
|---|---|---|
| A | 王小明 | 2018-3-1 | 
| B | 陳小花 | 2018-2-1 | 
| C | 李小賢 | |
| D | 黃小美 | 2018-8-30 | 
再請各位指點
謝謝 !
試試..
select OWNER
,max(Date) as Date
from 表1
left join 表2 on 表1.PN = 表2.PN
group by OWNER
如果不是只需要表2的Date欄位,還需要表2的其他欄位,我建議這樣寫(從內層往外層看):
select B.*
--以下B層,把tag1做出來--
from(
select A.*,
MAX(A.Date) over (PARTITION BY A.OWNER) tag1
--以下A層,先把兩份表作在一起,把完整資料做出來。--
from(
select 表2.*,表1.OWNER
from 表2
left join 表1 on 表2.PN = 表1.PN
) A 
--以上A層--
) B
--以上B層--
where B.Date = tag1
留意大小寫問題,有必要就加"雙引號"
SELECT 
    A.PN
    , A.OWNER
    , Max(B.Date) AS Date
FROM 
    表1 A LEFT JOIN 表2 B 
    ON 表1.PN = 表2.PN
GROUP BY A.PN, A.OWNER