2012-09-03 49 views
1

我有以下的聯合查詢,查詢了最近一列的日期,如果它存在:選擇左邊或右邊的2的較大查詢

SELECT TOP 1 m.sentdate AS 'calltreelastsignedoff' 
FROM Incidents i 
INNER JOIN Plans p ON i.planuid = p.uid 
INNER JOIN IncidentMessages im ON i.uid = im.incidentuid 
INNER JOIN Messages m ON im.messageuid = m.uid 
WHERE p.uid = '031E3346-2921-426E-9494-1111111111' 
UNION 
SELECT TOP 1 m.sentdate AS 'calltreelastsignedoff' 
FROM Incidents i 
INNER JOIN PlanExercises pe ON i.planexerciseuid = pe.uid 
INNER JOIN IncidentMessages im ON i.uid = im.incidentuid 
INNER JOIN Messages m ON im.messageuid = m.uid 
WHERE pe.planuid = '031E3346-2921-426E-9494-1111111111' 

這將如果每個查詢返回2個值返回前1個結果。

我真正想要的是選擇組合查詢的前1位。

如何在聯合查詢上執行選擇?

回答

3

試試這個:

你可以用派生表

select top 1 from 
( 
    SELECT TOP 1 m.sentdate AS 'calltreelastsignedoff' 
    FROM Incidents i 
    INNER JOIN Plans p ON i.planuid = p.uid 
    INNER JOIN IncidentMessages im ON i.uid = im.incidentuid 
    INNER JOIN Messages m ON im.messageuid = m.uid 
    WHERE p.uid = '031E3346-2921-426E-9494-1111111111' 

    UNION 

    SELECT TOP 1 m.sentdate AS 'calltreelastsignedoff' 
    FROM Incidents i 
    INNER JOIN PlanExercises pe ON i.planexerciseuid = pe.uid 
    INNER JOIN IncidentMessages im ON i.uid = im.incidentuid 
    INNER JOIN Messages m ON im.messageuid = m.uid 
    WHERE pe.planuid = '031E3346-2921-426E-9494-1111111111' 
)a 
order by <col> 
做到這一點
相關問題