首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

急怎么查询[用户表]中指定n个用户在[用户登录记录表]中的最新登录信息

2012-01-22 
急...如何查询[用户表]中指定n个用户在[用户登录记录表]中的最新登录信息?用户表:Tbl_User_Index[UserId][

急...如何查询[用户表]中指定n个用户在[用户登录记录表]中的最新登录信息?
用户表:Tbl_User_Index
[UserId]     [UserName]       [UserGroup]
      1                     a                       Guest
      2                     b                       Viewer
      3                     c                       Guest
      4                     d                       Guest
      .                     .
      .                     .
      .                     .

用户登录记录表:Tbl_Login_Info
[UserId]           [LoginTime]                 ...
      1           2007-01-01   08:00:00
      1           2007-02-13   14:10:30
      1           2007-05-11   12:14:32
      2           2006-11-21   12:34:12
      2           2007-04-11   13:22:45
      3           2007-03-14   09:01:50
      3           2007-02-13   14:10:30
      4           2007-02-05   23:22:45
      .                     .
      .                     .
      .                     .

例如:如何查找表Tbl_User_Index中[UserGroup]为Guest的用户在表Tbl_Login_Info中的最新记录?

结果格式:
UserName   UserID               LoginTime                     ...
        a               1         2007-05-11   12:14:32
        c               3         2007-03-14   09:01:50
        d               4         2007-02-05   23:22:45

[解决办法]
select a.[UserId],
a.[UserName],
b.[LoginTime]
from Tbl_User_Index a
left join (select [UserId],max([LoginTime]) as [LoginTime] from Tbl_Login_Info group by [UserId])b on a.[UserId]=b.[UserId]

[解决办法]
create table Tbl_User_Index([UserId] int,[UserName] varchar(20),[UserGroup] varchar(20))
insert into Tbl_User_Index
select 1, 'a ', 'Guest '
union all select 2, 'b ', 'Viewer '
union all select 3, 'c ', 'Guest '


union all select 4, 'd ', 'Guest '

create table Tbl_Login_Info([UserId] int,[LoginTime] datetime)
insert into Tbl_Login_Info
select 1, '2007-01-01 08:00:00 '
union all select 1, '2007-02-13 14:10:30 '
union all select 1, '2007-05-11 12:14:32 '
union all select 2, '2006-11-21 12:34:12 '
union all select 2, '2007-04-11 13:22:45 '
union all select 3, '2007-03-14 09:01:50 '
union all select 3, '2007-02-13 14:10:30 '
union all select 4, '2007-02-05 23:22:45 '
/*
UserName UserID LoginTime ...
a 1 2007-05-11 12:14:32
c 3 2007-03-14 09:01:50
d 4 2007-02-05 23:22:45
*/
select a.username,a.userid,b.LoginTime from Tbl_User_Index a,Tbl_Login_Info b
where a.userid=b.userid and not exists
(select 1 from Tbl_Login_Info where userid=b.userid and LoginTime> b.LoginTime)

drop table Tbl_Login_Info,tbl_User_Index
[解决办法]
To wgsasd311(自强不息):
我的Tbl_Login_Info表中的记录比较多
存的有最近十几年的记录
刚刚我试了一下
如果表内有时间比较接近的记录(比如2007年的)时,可以查出来
但是如果删除2000年~2007年的记录之后
好像就没办法查出来了?
----------------------------------
他的没有错的吧....他的是B表自连一次,先查出B表中的最新记录

-------------------------------------------------
To gahade(与君共勉):
我按照你写的格式稍微修改了一下(格式没变)
怎么查出来的结果不是一个用户对应一条呢?
另外语句中的 "...Group By [UserId]... "在我这里为什么必须加上 "...Group By [UserId],[LoginTime]... "才能执行查询?
-------------------------
select [UserId],max([LoginTime]) as [LoginTime] from Tbl_Login_Info group by [UserId]
这个你先运行一次看看,有没有重复的,他的也应没问题的
-------------------------

热点排行