Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос с JOIN'ом - помогите допилить  [new]
Skodnik
Member

Откуда: Ukraine
Сообщений: 13
Имеется таблица пользователей Users со столбцами [Id, Name]
Имеется таблица пользовательских сессий Sessions со столбцами [Id, UserId, Time]
Необходимо выбрать активность пользователей за последние несколько месяцев, при чем отобрать по каждому юзеру только последнюю активность.
Пока что запрос имеет вид:
автор
SELECT
S.Name
,U.Time
FROM Sessions as S
LEFT JOIN Users as U
ON S.UserId=U.Id
Where Sessions.Time>Date1 AND Sessions.Time<Date2


но он отбирает все активности, хотелось на каждого пользователя по одной строке. Подскажите как правильно?
1 ноя 11, 17:14    [11534604]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с JOIN'ом - помогите допилить  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Skodnik,

Вначале выбери юзеров, и дату последнюю
SELECT
S.Name
,max(U.Time)
FROM Sessions as S
LEFT JOIN Users as U ON S.UserId=U.Id

А после, привязать к первому запросу, через INNER JOIN.
1 ноя 11, 17:23    [11534678]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с JOIN'ом - помогите допилить  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Skodnik,

В предыдущем посте ошибочка.
SELECT
S.Name
,max(U.Time)
FROM Sessions as S
LEFT JOIN Users as U ON S.UserId=U.Id
GROUP BY S.Name
1 ноя 11, 17:24    [11534686]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с JOIN'ом - помогите допилить  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Skodnik,

SELECT *
FROM
(
SELECT S.Name, U.Time,
ROW_NUMBER () OVER (PARTITION BY S.Name ORDER BY U.Time desc) AS num
FROM Sessions as S
LEFT JOIN Users as U ON S.UserId=U.Id
) ff
WHERE num =1
1 ноя 11, 17:33    [11534776]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с JOIN'ом - помогите допилить  [new]
netivan
Member

Откуда:
Сообщений: 8768
trew
Skodnik,

SELECT *
FROM
(
SELECT S.Name, U.Time,
ROW_NUMBER () OVER (PARTITION BY S.Name ORDER BY U.Time desc) AS num
FROM Sessions as S
LEFT JOIN Users as U ON S.UserId=U.Id
) ff
WHERE num =1
это если сессий не так уж много. ROW_NUMBER () при большом кол-ве записей тормозит.
1 ноя 11, 17:45    [11534865]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить