[英]SQL Server : group by each row select
对于 SQL Server:
Phones
每个用户可以有多个号码,我想为每个用户找到最旧的活动电话号码。 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.