2017-04-19 9 views
0

2つのテーブルと2名様から最新の日付を取得します。私はテーブルを持っている

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

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

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

は、今私は人と(同じPersonテーブルの上にある)配偶者を持っていると言います。 対応するメモと通話履歴があります。

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) 

しかしなし運:私が欲しいもの

は、配偶者や人の最新の日付(電話またはノート)

アイブ氏が試したいずれかから最新の日付を選択することです。

EDIT:この選択は、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?

私は何をやったこと(単一の行に二人からの2つのテーブルを結合し、MAXが一人一人のために日付を取得する必要がありますテーブル - CallHistoryとNotes)。その後、その4つの列から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 

これは将来誰にでも役立つことを願っています。

関連する問題