Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
happy29 Member Откуда: Сообщений: 9 |
Есть таблица name,date,price в name допустим Маша,Иван,Женя ,у Маши 3 даты, соответственно в таблице 3 строки с одинаковым полем Маша,у Ивана 4 ,у Жени 1.Надо вывести две последние даты на каждого человека.Как просто последнюю дату вывести понимаю,как две последние уже затрудняюсь.Подскажите пожалуйста) |
25 ноя 13, 13:27 [15184976] Ответить | Цитировать Сообщить модератору |
WarAnt Member Откуда: Питер Сообщений: 2423 |
happy29, В зависимости от сервера row_number(), top |
25 ноя 13, 13:41 [15185079] Ответить | Цитировать Сообщить модератору |
happy29 Member Откуда: Сообщений: 9 |
Можно по подробнее про row number ,тока начал изучать,не очень понимаю как его можно связать с данной проблемой |
25 ноя 13, 13:46 [15185122] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Нумеруете записи в окне поля name по убыванию поля date Берете те записи, у которых номер не больше 2 |
||
25 ноя 13, 13:55 [15185194] Ответить | Цитировать Сообщить модератору |
happy29 Member Откуда: Сообщений: 9 |
вот пронумеровал SELECT row_number() over(partition BY name ORDER BY date DESC) num,name ,date FROM Table и че т туплю, как дополнить условием не больше 2х , с WHERE num <= 2 не получается. |
25 ноя 13, 14:36 [15185586] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9646 |
with cte as (SELECT row_number() over(partition BY name ORDER BY date DESC) num,name ,date FROM Table) select name, date from cte where num <= 2; |
25 ноя 13, 14:38 [15185607] Ответить | Цитировать Сообщить модератору |
happy29 Member Откуда: Сообщений: 9 |
Огромное спасибо всем.Получилось.With cte as - это как бы создание временной таблицы как я понял? |
25 ноя 13, 14:47 [15185694] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
select name, date from (SELECT row_number() over(partition BY name ORDER BY date DESC) num,name ,date FROM Table) cte where num <= 2;А ведь это одно и то же! |
||
25 ноя 13, 14:50 [15185725] Ответить | Цитировать Сообщить модератору |
pio777 Member Откуда: Сообщений: 127 |
Тыц |
||
25 ноя 13, 15:11 [15185926] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |