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

Откуда:
Сообщений: 352
Подскажите пожалуйста
Как можно из таблицы выбрать данные у которых значение определенного поля одинаково, но по дате которая более поздняя.. к примеру:
 id date            additional
 1   10.10.09     чебурек
 2   11.10.09      чебурек
 3   09.05.09      помидор
 4.  07.06.09      помидор

должно выдать
 2   11.10.09      чебурек
 4.  07.06.09      помидор
15 июн 09, 22:43    [7302672]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом.  [new]
iljy
Guest
anesty
Подскажите пожалуйста
Как можно из таблицы выбрать данные у которых значение определенного поля одинаково, но по дате которая более поздняя.. к примеру:
 id date            additional
 1   10.10.09     чебурек
 2   11.10.09      чебурек
 3   09.05.09      помидор
 4.  07.06.09      помидор

должно выдать
 2   11.10.09      чебурек
 4.  07.06.09      помидор


один из вариантов:
select t2.* from
(select max(date) date, additional from _table_  group by additional) t1
   join
_table_ t2 on t1.additional = t2.additional and t1.date = t2.date

другой:
select t2.* from
(select distinct additional from _table_) t1
     cross apply
(select top 1 * from _table_  t where t.additional = t1.additional order by date desc) t2
второй - начиная с 2005. выбирайте какой быстрее, это зависит от.
15 июн 09, 23:32    [7302776]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом.  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
SQL2005/2008
1
WITH CTE AS (SELECT ROW_NUMBER()OVER(PARTITION BY additional ORDER BY [date] DESC) N, * FROM [Table])
SELECT id, [date], additional
FROM CTE
WHERE N=1;

2
SELECT TOP 1 WITH TIES *
FROM [Table]
ORDER BY ROW_NUMBER()OVER(PARTITION BY additional ORDER BY [date] DESC);
16 июн 09, 09:44    [7303386]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить