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

Откуда:
Сообщений: 179
Добрый день! Такой вот вопрос-
подскажи вариант решения задачи
есть запрос:
данный запрос возвращает для поля field последнюю дату.
select c.field, max(c.date)
from table c
group by c.field

необходимо вернуть все имеющуюся информацию из таблицы table по этим сгруппированным значениям.
Под конец дня голова отказывается соображать...чувствую что ответ где-то рядом...
10 апр 13, 13:57    [14161819]     Ответить | Цитировать Сообщить модератору
 Re: Аналитические функции  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
select top (1) with ties
 c.field, max(c.date)
from
 table c
order by
 row_number() over (partition by c.field order by c.date desc);
10 апр 13, 14:00    [14161832]     Ответить | Цитировать Сообщить модератору
 Re: Аналитические функции  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
Тьфу...
select top (1) with ties
 c.*
from
 table c
order by
 row_number() over (partition by c.field order by c.date desc);
10 апр 13, 14:00    [14161834]     Ответить | Цитировать Сообщить модератору
 Re: Аналитические функции  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
invm
Тьфу...
select top (1) with ties
 c.*
from
 table c
order by
 row_number() over (partition by c.field order by c.date desc);
Наверно, правильнее RANK() вместо ROW_NUMBER()?
10 апр 13, 14:16    [14161940]     Ответить | Цитировать Сообщить модератору
 Re: Аналитические функции  [new]
Tester666
Member

Откуда:
Сообщений: 179
Всем спасибо за ответы! Аналитические функции еще не приходилось использовать, буду изучать помаленьку.
Мне подойдет именно ROW_NUMBER(). Для каждой секции полей, по которым я группирую нужна 1 запись.
RANK() здесь не подойдет.
10 апр 13, 14:48    [14162179]     Ответить | Цитировать Сообщить модератору
 Re: Аналитические функции  [new]
_human
Guest
Tester666,
select distinct c.field, max(c.date) OVER(partition by c.field)
from table c

что б "вернуть все имеющуюся"
select c.field, max(c.date) OVER(partition by c.field)
from table c
10 апр 13, 14:56    [14162225]     Ответить | Цитировать Сообщить модератору
 Re: Аналитические функции  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
iap
Наверно, правильнее RANK() вместо ROW_NUMBER()?
Согласен, универсальнее.
10 апр 13, 15:11    [14162330]     Ответить | Цитировать Сообщить модератору
 Re: Аналитические функции  [new]
Tester666
Member

Откуда:
Сообщений: 179
_human, не подойдет, для каждой строки внутри секции он вернет последнюю дату.
А мне из каждой секции нужно выбрать одну строку с последней датой и вернуть все ее атрибуты.
10 апр 13, 15:14    [14162362]     Ответить | Цитировать Сообщить модератору
 Re: Аналитические функции  [new]
_human
Guest
Tester666,
дык, возвращайте все поля таблиц из своей выборки.
что не получается ?
10 апр 13, 15:34    [14162537]     Ответить | Цитировать Сообщить модератору
 Re: Аналитические функции  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Tester666
Всем спасибо за ответы! Аналитические функции еще не приходилось использовать, буду изучать помаленьку.
Мне подойдет именно ROW_NUMBER(). Для каждой секции полей, по которым я группирую нужна 1 запись.
RANK() здесь не подойдет.
А если строк с максимальной датой для одной секции несколько?
По какому признаку оставляете одну строку и не показываете другие?
10 апр 13, 15:36    [14162558]     Ответить | Цитировать Сообщить модератору
 Re: Аналитические функции  [new]
Добрый Э - Эх
Guest
Tester666,

ну ведь только сегодня обсуждали...
10 апр 13, 19:07    [14163929]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить