Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как посмотреть последние продажи пользователя?  [new]
Начинающий SQL
Guest
Добрый день.

2ю неделю изучаю SQL. Может это элемнтарно, но я уже потратил 2 часа, пока ничего не получилось. Вопрос следующий:

У нас есть 2 таблицы:
Users (ID,Name) и Sales (ID, UserID, Date, ItemID)

Как посмотреть только последнюю продажу для каждого пользователя?
15 окт 13, 07:53    [14970598]     Ответить | Цитировать Сообщить модератору
 Re: Как посмотреть последние продажи пользователя?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
select top 1 with ties * from Sales
order by row_number() over ( partition by UserID order by Date desc ) 
15 окт 13, 07:58    [14970606]     Ответить | Цитировать Сообщить модератору
 Re: Как посмотреть последние продажи пользователя?  [new]
Начинающий SQL
Guest
Knyazev Alexey, все работает. Сейчас буду разбирать как :)
Спасибо большое!
15 окт 13, 08:04    [14970614]     Ответить | Цитировать Сообщить модератору
 Re: Как посмотреть последние продажи пользователя?  [new]
cross apply
Guest
я бы еще попробовал такой вариант, возможно он будет быстрее

select * 
from users u
-- outer apply  - если нужно выводить пользователей без продаж
cross apply (
select top 1 *
from Sales s
where s.user_id = u.id
order by date  desc
) s
15 окт 13, 09:32    [14970795]     Ответить | Цитировать Сообщить модератору
 Re: Как посмотреть последние продажи пользователя?  [new]
Roman_sib
Member

Откуда:
Сообщений: 10
до кучи :
select sales.data, users.name, sales.itemid from sales, users
where (sales.userid=users.id)
and (sales.data in (select max (sales.data) from sales, users where sales.userid=users.id group by users.name))
15 окт 13, 14:13    [14973058]     Ответить | Цитировать Сообщить модератору
 Re: Как посмотреть последние продажи пользователя?  [new]
Добрый Э - Эх
Guest
Roman_sib
до кучи :
Ну, до кучи тут ещё далеко. Даже основные способы не все объяты, не говоря уже о "вариациях на тему"...
16 окт 13, 05:17    [14977471]     Ответить | Цитировать Сообщить модератору
 Re: Как посмотреть последние продажи пользователя?  [new]
Rem
Member

Откуда:
Сообщений: 261
С partition получил tablescan, вариант с inner join c подзапросом, определяющим последнюю дату, заюзал индекс. Не знаю насколько корректно сравнивать по времени, но второй вариант раз в 70 быстрее первого на таблице с 20 млн. записей.
16 окт 13, 13:38    [14979831]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить