sql 查询问题

我有一张表A(time,userid,column1,column2,column3),
由于历史原因,A中出现了很多历史数据,就是同一个userid会有很多记录,time表示时间(精确度:天),一个用户一天会有一条记录,但是其他字段又各不相同,例如:

time userid col1 col2 col3 ...
2014-04-01 u1 v1 v2 v3
2014-04-02 u1 v1' v2' v3'
2014-04-03 u1 v1'' v2'' v3''
2014-04-04 u1 v1''' v2''' v3'''
2014-04-01 u2 m1 m2 m3
2014-04-02 u2 m1' m2'' m3'
2014-04-03 u2 m1'' m2'' m3'''

现在我得到了userid的一个集合,怎么查这些userid的历史记录中时间最大的记录呢,如集合userids(u1, u2),要得到如下:
2014-04-04 u1 v1''' v2''' v3'''
2014-04-03 u2 m1'' m2'' m3'''

阅读 2.6k
1 个回答
sqlselect aa.* from (select * from A where A.userid in (u1, u2)) aa inner join (
   select max(time) as max_time, userid from A where A.userid in (u1, u2) group by userid
  ) b 
   where 
     aa.userid = b.userid 
     and aa.time = b.max_time

没有去验证,可能有语法问题


答案更新了下, 优化 sql

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进