22,209
社区成员
发帖
与我相关
我的任务
分享
UPDATE T_UserLoginRoomLog SET
Area=B.Area,ModelType=B.ModelType,PlatForm = B.PlatForm,Lic = B.Lic
FROM (SELECT TOP 1 * FROM T_UserLoginLog A WHERE A.UserID=UserLoginRoomLog.PerID AND A.LoginTime<UserLoginRoomLog.RoomTime ORDER BY A.ID DESC) B
WHERE T_UserLoginRoomLog.[Year]='2010' AND T_UserLoginRoomLog.[Month] ='1' AND T_UserLoginRoomLog.[Day]='28'
select
RoomLog.PerID,
max(LoginLog.ID) maxID
into
#NeedUpdate
from
T_UserLoginRoomLog RoomLog
inner join
T_UserLoginLog LoginLog
on
RoomLog.PerID = LoginLog.UserID
and
RoomLog.RoomTime > LoginLog.LoginTime
where
RoomLog.[Year] = '2010'
and
RoomLog.[Month] = '1'
and
RoomLog.[Day] = '28';
update
RoomLog
set
RoomLog.Area = LoginLog.Area,
RoomLog.ModelType = LoginLog.ModelType,
RoomLog.PlatForm = LoginLog.PlatForm,
RoomLog.Lic = LoginLog.Lic
from
T_UserLoginRoomLog RoomLog
inner join
#NeedUpdate NeedUpdate
on
RoomLog.PerID = NeedUpdate.PerID
inner join
T_UserLoginLog LoginLog
on
NeedUpdate.maxID = LoginLog.ID;
drop table #NeedUpdate;
--直接将(select top 1 * ...)的语句取值给set中的值赋值即可,还有select top 1 ...的查询是否一定有结果,如果无
--结果,将是null,以下假设只给select top 1 * 查询有结果的记录update
UPDATE T_UserLoginRoomLog SET
Area=(SELECT TOP 1 area FROM T_UserLoginLog A
WHERE A.UserID=UserLoginRoomLog.PerID AND A.LoginTime<UserLoginRoomLog.RoomTime
ORDER BY A.ID DESC),
ModelType=(SELECT TOP 1 modeltype FROM T_UserLoginLog A
WHERE A.UserID=UserLoginRoomLog.PerID AND A.LoginTime<UserLoginRoomLog.RoomTime
ORDER BY A.ID DESC),
PlatForm = (SELECT TOP 1 platform FROM T_UserLoginLog A
WHERE A.UserID=UserLoginRoomLog.PerID AND A.LoginTime<UserLoginRoomLog.RoomTime
ORDER BY A.ID DESC),
Lic = (SELECT TOP 1 lic FROM T_UserLoginLog A
WHERE A.UserID=UserLoginRoomLog.PerID AND A.LoginTime<UserLoginRoomLog.RoomTime
ORDER BY A.ID DESC)
WHERE T_UserLoginRoomLog.[Year]='2010' AND T_UserLoginRoomLog.[Month] ='1' AND T_UserLoginRoomLog.[Day]='28'
and exists(SELECT * FROM T_UserLoginLog A
WHERE A.UserID=UserLoginRoomLog.PerID AND A.LoginTime<UserLoginRoomLog.RoomTime)