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

Откуда:
Сообщений: 1497
Здравствуйте. Есть набор данных, помогите составить на его основе запрос

SET DATEFORMAT DMY
CREATE Table #T (keyT int, Znach int, dt datetime)

INSERT INTO #T (keyT, Znach, dt )
VALUES  (1, 2, '10.01.2014')
			, (1, 1, '11.01.2014')
			, (1, 3, '12.01.2014')
			
			, (2, 1, '10.01.2014')
			, (2, 2, '11.01.2014')
			, (2, 4, '12.01.2014')
			, (2, 3, '13.01.2014')
			
--SELECT keyT, MIN(Znach) OVER (PARTITION BY keyT) as Zn
--FROM #T

DROP TABLE #T

Можно ли одним запросом без подзапросов получить результат с группировкой по полю keyT, а в поле Znach чтобы было значение соответствующее последнему из dt?
т.е.
keyT, Znach, dt
1, 3, '12.01.2014'
2, 3, '13.01.2014'

чтобы результат был, как будто бы запрос
SELECT TOP(1) keyT, Znach, dt FROM #T ORDER BY dt 
был бы применен для каждого keyT
Предполагаю, что надо использовать OVER (PARTITION BY KeyT), но как именно что-то не пойму.
18 авг 14, 12:22    [16455031]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос без подзапросов.  [new]
Glory
Member

Откуда:
Сообщений: 104751
MIN() +GROUP BY
18 авг 14, 12:23    [16455035]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос без подзапросов.  [new]
Диам
Member

Откуда:
Сообщений: 1497
MIN() даст мне минимальное значение. А мне нужно первое, согласно заданной сортировке.
18 авг 14, 12:27    [16455061]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос без подзапросов.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Диам
MIN() даст мне минимальное значение. А мне нужно первое, согласно заданной сортировке.

Ну так нумеруйте тогда ваши записи согласно сортировке в окне
И выбирайте те, у которых номер будет 1
18 авг 14, 12:32    [16455109]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос без подзапросов.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SELECT TOP(1) WITH TIES *
FROM #T
ORDER BY ROW_NUMBER()OVER(PARTITION BY keyT ORDER BY dt DESC);
18 авг 14, 12:35    [16455135]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос без подзапросов.  [new]
Диам
Member

Откуда:
Сообщений: 1497
iap, отличное решение. Премного благодарен.
18 авг 14, 12:46    [16455263]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос без подзапросов.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Диам
iap, отличное решение. Премного благодарен.
Не за что.
За последние 8 лет это решение тут мелькало раз 100.
Даже в FAQе есть...
18 авг 14, 12:53    [16455336]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить