我有表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)
答案 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