主表A两字段:UserID<主键,int自增长>,UserName和从表B ActionId<PK,自增长>,UserId<FK>, Action_beginDate, Action_EndDate 。 主表A往B表里插入数据(一对多:即表A的任一用户均可往B表插入多条数据.)
现在想要的结果:表A所有不重复用户的操作记录结果集.(注:如果A表的任一用户在表B里有多条,只要得到最后插入的一条即可.没有往B表里插入数据的用户也要显示出来。另外:Action_beginDate、Action_EndDate 都是日期型.且在表B里可能为空[IS NULL].).
请教SQL 如何写呢(性能好点)?
现在想要的结果:表A所有不重复用户的操作记录结果集.(注:如果A表的任一用户在表B里有多条,只要得到最后插入的一条即可.没有往B表里插入数据的用户也要显示出来。另外:Action_beginDate、Action_EndDate 都是日期型.且在表B里可能为空[IS NULL].).
请教SQL 如何写呢(性能好点)?
select UserId,ActionId=Max(ActionId)
into #tmp
from 表B
group by UserIdselect t1.UserID,t1.UserName,t3.ActionId,t3.Action_beginDate,t3.
from 表A t1 left join #tmp t2 on t1.UserId=t2.UserIdAction_EndDate
left join 表B t3 on left join t2.ActionId=t3.ActionId
on a.userid=b.userid
and not exists
(select 1 from b as tb
where tb.UserId=b.UserId
and tb.ActionId>b.ActionId)