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

Откуда:
Сообщений: 77
Имеется таблица:

Картинка с другого сайта.

В ней, из столбца Present, при одинаковых значениях, нужно оставить только ту строку, где значение Diff минимальное.

Таблица получена следующим запросом (на всякий случай):
select 
pres.TaskId as 'TaskId',
pres.StatusId as 'StatusId',
convert(varchar, pres.[Date], 120) as 'Present',
[next].StatusId,
convert(varchar, [next].[Date], 120) as 'Next',
DATEDIFF(n, [next].[Date], pres.[Date])*(-1) as 'Diff'

FROM
(
SELECT 
TaskId,
StatusId,
[Date]
FROM TaskLifetime
where 
StatusId is not NULL
) "next"
INNER JOIN
(
SELECT 
TaskId,
StatusId,
[Date]
FROM TaskLifetime
WHERE
StatusId is not NULL

) pres on [next].taskid=pres.taskid
WHERE
DATEDIFF(s, pres.[Date], [next].[Date])>0
AND pres.StatusId=26
and pres.TaskId=7780


При изменении кода получения разницы на
MIN(DATEDIFF(n, [next].[Date], pres.[Date])*(-1)) as 'Diff'

Ничего не меняется. (Group by прописывал)
7 дек 14, 22:33    [16963968]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимального из группы  [new]
Pim.
Member

Откуда:
Сообщений: 77
Если не так, то другой вопрос: как обратиться к предыдущей записи таблицы?
7 дек 14, 23:05    [16964028]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимального из группы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31779
Pim.
В ней, из столбца Present, при одинаковых значениях, нужно оставить только ту строку, где значение Diff минимальное.
Нумеруйте строки с помощью ROW_NUMBER() с сортировкой по Diff, и оставляйте первую
7 дек 14, 23:10    [16964039]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимального из группы  [new]
Pim.
Member

Откуда:
Сообщений: 77
alexeyvg,

Но я же тогда получу только одно значение, разве нет? Мне же нужно минимальное при одинаковом значении Present, т.е. мне нужно на выходе получить из таблицы 1ю и 4ю строку.
7 дек 14, 23:13    [16964043]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимального из группы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31779
Pim.
Но я же тогда получу только одно значение, разве нет? Мне же нужно минимальное при одинаковом значении Present, т.е. мне нужно на выходе получить из таблицы 1ю и 4ю строку.
А для этого в ROW_NUMBER() есть ещё и группировка :-)

В вашем случае нужна, видимо, по TaskId и Present
7 дек 14, 23:36    [16964081]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимального из группы  [new]
Pim.
Member

Откуда:
Сообщений: 77
alexeyvg,

Понял, сейчас буду пробовать. Спасибо
7 дек 14, 23:37    [16964083]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить