Объединить оператор MS SQL Server WITH в оператор Select - PullRequest
0 голосов
/ 23 июня 2019

Я получил ответ на этот вопрос Последний пользователь MS SQL Server вошел в систему на нескольких клиентах с несколькими пользователями , и это прекрасно работает.

;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 Ответ

1 голос
/ 23 июня 2019

Нет ограничений, вы можете просто объединить результат 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...