2011-05-11 63 views
1

给出以下获得最早日期为每个ID

table1 
id,name 
1,test1 
2,test2 
3,test3 

tablePrt 
id,date 
1,5/1/11 
1,5/3/11 
3,3/1/11 

tableOnl 
id,date 
1,5/4/11 
1,5/15/11 

tableSrv 
id,date 
1,5/13/11 
1,5/1/11 
2,4/1/11 

有一些什么方式来获得来自所有3个表每个ID加上在表1的id名单一最早日期?

所以从上面的结果应该如下所示:

test1, 5/1/11 
test2, 4/1/11 
test3, 3/1/11 

回答

3
SELECT t1.id, 
     MIN(tbls.DATE) 
FROM table1 t1 
     INNER JOIN (SELECT id, 
          DATE 
        FROM tableprt 
        UNION ALL 
        SELECT id, 
          DATE 
        FROM tableonl 
        UNION ALL 
        SELECT id, 
          DATE 
        FROM tablesrv) tbls 
     ON t1.id = tbls.id 
GROUP BY t1.id 

注: 没有必要做UNION ALL这里 正如马丁注意到虽然UNION ALL不需要它可能是更快

+1

'UNION ALL'可以通过我非常快速的测试给出一个计划[更低的估算成本](http://i.stack.imgur.com/LHLON.jpg)。 – 2011-05-11 19:54:06

+0

@Martin doh。当然,UNION ALL不会执行重复数据删除,因为我们正在寻找分钟UNION ALL会更好 – 2011-05-11 19:57:07

相关问题