2017-04-19 44 views
0

我有表:從2級表和2人獲得最新的日期

Person 
------------- 
ID | name 

      Notes 
--------------------------- 
targetID | Content | Date 

     CallHistory 
-------------------------- 
CallerID | CalleeID | Date 

現在說我有一個個人和配偶(這是對同一人表)。 他們有相應的筆記和callhistory。

我要的是無論從配偶或人的最近的日期(來電或注)

我用盡選擇最近的日期:

SELECT top 1 Date, ID from (select TargetID as ID, Date from notes 
         union 
         SELECT CalleeID as ID, Date from Callhistory) 
WHERE ID in (person.ID, spouse.ID) 

,但沒有運氣。

編輯:這是選擇一個select語句中:

select p.*, SELECT top 1 Date, ID from (select TargetID as ID, Date from notes 
          union 
          SELECT CalleeID as ID, Date from Callhistory) 
    WHERE ID in (person.ID, spouse.ID) as RecentContactDate 
From Person person 
LEFT JOIN PersonRelationship pr on person.ID = pr.ID AND pr.Type = 3 -- spouse 
LEFT JOIN Person spouse on pr.RelatedID = spouse.ID 
...... 

即時得到Ambigous column name Date錯誤。

有什麼想法?

+2

你怎麼知道他們是配偶?我沒有在你的表格中看到這種關係。 –

+0

不管他們是否配偶是無關緊要的。我說,如果我必須ID ..? –

+0

你說「配偶或人的最近日期」 - 所以你需要有一種方法來確定他們的關係。 –

回答

0

@斯文的對這個職位的回答幫助我解決我的問題:SQL MAX of multiple columns?

我所做的是加入從兩個人的兩個表成單行(需要獲得MAX日期爲每個人的表 - CallHistory和Notes)。然後從這四列中取出MAX。所以這是修復:

select p.*, 
(SELECT Max(v) 
    FROM (VALUES (pNote.Date), (pCh.Date), (sNote.Date),(sCh.Date)) AS value(v)) as [MaxDate] 
    WHERE ID in (person.ID, spouse.ID) as RecentContactDate 
From Person person 
LEFT JOIN PersonRelationship pr on person.ID = pr.ID AND pr.Type = 3 -- spouse 
LEFT JOIN Person spouse on pr.RelatedID = spouse.ID 
LEFT JOIN (SELECT ID, MAX(Date) from Notes) pNote on pNote.targetID = person.ID 
LEFT JOIN (SELECT ID, MAX(Date) from CallHistory) pCh on person.ID = ch.CalleeID 
LEFT JOIN (SELECT ID, MAX(Date) from Notes) sNote on spouse.ID = pNote.targetID 
LEFT JOIN (SELECT ID, MAX(Date) from CallHistory) sCh on spouse.ID = ch.CalleeID 

我希望這將有助於任何人在未來。