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