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

求SQL,解决办法

2013-07-01 
求SQL,急正上班呢,碰到个sql不会写啊我有个用户状态表是来记录用户的出入状态字段有 iduserIdstatus date

求SQL,急
正上班呢,碰到个sql不会写啊

我有个用户状态表是来记录用户的出入状态
字段有 id  userId  status date

当用户A(id=10) 在date='2012-01-12 12:12:12' '入' 则会存入记录 1,10,1,'2012-01-12 12:12:12'
当用户A(id=10) 在date='2012-05-12 xx:xx:xx' '出' 则会存入记录 2,10,0,'2012-05-12 xx:xx:xx'
当用户M(id=50) 在date='xxxx-xx-xx xx:xx:xx' '入' 则会存入记录 3,50,1,'xxxx-xx-xx xx:xx:xx'
...

当然主键是自增的, 用户跟状态表是一对多, 我想要用户集合,当且仅当用户的最大时间对应的status为1的记录.

上面的例子中A用户的最大时间为2012-05-12 xx:xx:xx 对应的状态为0(就当他只有上面这两条记录,实际可能很多)则不在我要的集合中
M用户最大时间为xxxx-xx-xx xx:xx:xx 状态为1 这要这条记录

应该讲的很清楚了,逻辑也不复杂的
[解决办法]

SELECT * FROM 
TB a
WHERE EXISTS
(SELECT 1 FROM (
SELECT userID,MAX([date])[date]
FROM TB 
WHERE [status]=1
GROUP BY userID) b WHERE a.userID=b.UserID AND A.[date]=b.[date])


这样?

热点排行