将MS SQL Server WITH语句加入Select语句中

时间:2019-06-23 16:29:21

标签: sql-server

我收到了关于这个问题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

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