2017-04-19 1 views
0

Ich habe Tabellen:Erhalten Neueste Datum von 2 Tische und 2 Personen

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

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

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

Jetzt sagen, ich habe eine Person und ein Ehepartner (die auf der gleichen Person Tabelle). Sie haben entsprechende Notizen und Callhistory.

Was ich will, ist das jüngste Datum aus, um entweder den Ehepartner oder einer Person des jüngsten Datum (Anruf oder eine Notiz)

Ive versucht:

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) 

aber ohne Glück.

EDIT: Diese select ist in einer select-Anweisung:

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 
...... 

Im Ambigous column name Date Fehler.

irgendwelche Ideen?

+2

Woher wissen Sie, dass sie Ehepartner sind? Ich sehe diese Beziehung nicht in Ihren Tabellen. –

+0

ob sie Ehepartner sind oder nicht, ist irrelevant. Ich sage, was ist, wenn ich IDs habe ..? –

+0

Sie sagten "entweder der Ehegatte oder das letzte Datum der Person" - Sie müssen also eine Möglichkeit haben, ihre Beziehung zu bestimmen. –

Antwort

0

@ Antwort Sven zu diesem Beitrag ich mein Problem zu lösen hat geholfen: SQL MAX of multiple columns?

Was ich getan habe ist kommen Sie mit den beiden Tabellen von den zwei Personen in eine einzige Zeile (müssen den MAX Termine für jede Person zu erhalten Tabellen - CallHistory und Notizen). Dann hole den MAX aus diesen vier Spalten. Also hier ist die Lösung:

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 

Ich hoffe, dies wird jedem in der Zukunft helfen.

Verwandte Themen