2017-04-19 46 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 

我希望这将有助于任何人在未来。