如何获取特定记录的三个不同表中存在的列的最小值

时间:2014-12-07 14:31:18

标签: sql rdbms

我有三张桌子。这些表不需要有共同的成员。

首先是Opt_Out表:

**MemberId**         **Opt_out_Date**  
123               12-Jun-2014  
234               7-Dec-2014  
789               10-March-2014`

其次是Cov_End表:

  **MemberId**        **Cov_End_Date**  
     123               30-Jun-2014  
     234               31-Dec-2014  
     345               30-Sept-2014  
     891               30-Oct-2014  

第三张表是Decsd_Date表

 **MemberId**          **Deceased_Date**  
   123                 23-Jun-2014  
   345                 17-Sept-2014  
   456                 23-Jun-2014  
   678                 25-Aug-2014  

结果应该是这样的:

**MemberId**       **Min_Date**  
    123           12-Jun-2014    
    234           7-Dec-2014  
    345           17-Sept-2014  
    456           23-Jun-2014  
    678           25-Aug-2014  
    789           10-March-2014  
    891           30-Oct-2014

我希望以最佳方式和单一查询实现此结果。

1 个答案:

答案 0 :(得分:2)

您可以使用union all运算符合并表并将结果用作派生表:

SELECT MemberId, MIN(Date) AS "Min_Date"
FROM (
    SELECT MemberId, Cov_End_Date  AS "Date" FROM Cov_End
    UNION ALL
    SELECT MemberId, Opt_out_date  AS "Date" FROM Opt_Out
    UNION ALL
    SELECT MemberId, Deceased_Date AS "Date" FROM Decsd_Date
) src
GROUP BY MemberId

Sample SQL Fiddle(使用MS SQL 2012)