日期:2014-05-17  浏览次数:20452 次

求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])


这样?