繁体   English   中英

SQL Server:按每行选择分组

[英]SQL Server : group by each row select

对于 SQL Server:

  • 表名 = Phones
  • 列 = id, mobileno, status, userid, createdon

每个用户可以有多个号码,我想为每个用户找到最旧的活动电话号码。 Status=1是活动的。

例如:

user1= id=1, mobileno=123, status=1,userid=1,createdon=2019/12/20
user1= id=2, mobileno=1234, status=1,userid=1,createdon=2019/12/19
user1= id=3, mobileno=12348, status=0,userid=1,createdon=2019/12/17

user2= id=4, mobileno=12345, status=1,userid=2,createdon=2019/12/15
user2= id=5, mobileno=123456, status=1,userid=2,createdon=2019/12/10

结果必须是

user1= id=1, mobileno=1234
user2= id=2, mobileno=123456

(id unique 和 mobileno = 最老的活跃用户)

谢谢。

您可以使用row_number()

select t.id, t.mobileno
from (select t.*, row_number() over (partition by t.userid order by createdon) as seq
      from table t
      where t.status = 1
     ) t
where seq = 1;

如果ID是唯一的或自动递增的,那么您可以在order by子句而不是createdon使用它。

一个简单有效的方法是关联子查询:

select t.*
from t
where t.createdon = (select min(t2.createdon)
                     from t t2
                     where t2.userid = t.userid
                    );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM