SQL - 从其他相关表中检索最大日期

时间:2017-03-30 13:41:05

标签: sql select db2 left-join

我有表T1的数据:

ID GROUP
1  L1
2  L1
3  L2
4  L3

我有表T2的数据:

ID  GROUP  DATE
1   L1     03.03.2017
1   L2     01.01.2017
2   L1     03.03.2017
2   L2     02.02.2017
2   L1     01.01.2017
3   L2     03.03.2017
3   L1     02.02.2017
4   L3     05.03.2017
4   L2     02.02.2017
4   L3     05.01.2017
4   L1     01.01.2017

结果我想从T1获得一个完整列表(ID和当前组值),但是只有当T1中的当前GROUP不是L1时才会填充其他列,并且在该列中我希望从中获得最大DATE T2为该ID,其中GROUP不是L1,它与来自T1的GROUP值匹配。

所以SELECT(加入L1和L2)的结果应该是:

ID GROUP DATE
1  L1    null
2  L1    null
3  L2    03.03.2017
4  L3    05.03.2017

我试过这个sql但它抛出了错误:

        select t1.id,t1.group,t21.date from t1
        left outer join t2
     AS T21 on t21.id=t1.id and t1.group=t21.group
     and T21.group not in ('L1')
        AND T21.DATE IN (SELECT MAX(T22.DATE)
     FROM t2 AS T22 
WHERE T22.id=T21.id and T21.group=t22.group)

3 个答案:

答案 0 :(得分:1)

嗯。我从相关子查询的角度来考虑这一点:

select t1.*,
       (select max(t2.date)
        from t2
        where t2.id = t1.id and t1.group <> 'L1'
       ) as date
from t1;

答案 1 :(得分:1)

简单的加入和分组是否足够?

select t1.id,t1.group, max(t2.date) 
from t1 left outer join t2 on 
     t2.id=t1.id and 
     t1.group=t2.group and 
     T2.group <> 'L1'
group by t1.id,t1.group

答案 2 :(得分:0)

尝试这样的事情

Select T1.*, T2.Date1 from
T1 left outer join 
(select max(Date) as Date1
,[Group] as Group1 FROM T2
WHERE [Group]  !='L1'
group by [Group] ) T3
on t1.[GROUP] = T3.Group1
相关问题