我收到了关于这个问题MS SQL Server Last User Logged in Multiple Clients with Multiple Users的答案,效果很好。
;with cte as
(
select
client, myuser, lastlogin,
row_number() over (partition by client order by lastlogin desc) r#
from
@mytable
)
select *
from cte
where r# = 1
如何将其加入到常规Select
语句中,该语句也从其他表中选择数据?
例如:
SELECT t1.id, t2.name
FROM table1 t1
JOIN table2 t2 ON (t2.id = t1.id)
WHERE t1.id = 1
答案 0 :(得分:1)
没有限制,您可以将cte的结果与其他表连接在一起。 Cte是一个子查询,但是它使您的代码更具可读性。
;with cte as(
select client,myuser,lastlogin,row_number() over(partition by client order by lastlogin desc) r#
from @mytable
)
SELECT t1.id, t2.name
FROM table1 t1
JOIN table2 t2 ON (t2.id = t1.id)
JOIN cte t3 ON (...)
WHERE t1.id = 1
这与使用cte的查询相同。
SELECT t1.id, t2.name
FROM table1 t1
JOIN table2 t2 ON (t2.id = t1.id)
JOIN ( select client,myuser,lastlogin,row_number() over(partition by client order by lastlogin desc) r#
from @mytable) t3 ON (...)
WHERE t1.id = 1