iT邦幫忙

0

LEFT JOIN 重複結果顯示一筆

我想用多張表單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

再請各位指點

謝謝 !

2
純真的人
iT邦高手 3 級 ‧ 2018-10-08 17:51:43
最佳解答

試試..

select OWNER
,max(Date) as Date
from 表1
left join 表2 on 表1.PN = 表2.PN
group by OWNER
Neish iT邦研究生 4 級 ‧ 2018-10-09 09:04:51 檢舉

感謝大大協助!

0
張小馬
iT邦新手 5 級 ‧ 2018-10-08 18:19:39

如果不是只需要表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

留意大小寫問題,有必要就加"雙引號"

Neish iT邦研究生 4 級 ‧ 2018-10-09 09:05:10 檢舉

感謝張小馬熱心協助!
一樓大大已經可以滿足我的需求 也是最快回覆的
所以最佳解就給他了
Thank You

0
pcw
iT邦研究生 4 級 ‧ 2018-10-08 23:22:06
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
Neish iT邦研究生 4 級 ‧ 2018-10-09 09:05:43 檢舉

感謝pcw熱心協助!
結果與一樓大大相同
但他是最快回覆的
所以最佳解就給他了
Thank You

pcw iT邦研究生 4 級 ‧ 2018-10-09 12:17:15 檢舉

of course.
我也只是增加PN欄位而已。

我要發表回答

立即登入回答