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

Откуда:
Сообщений: 52
Исходная таблица:
CATxDatexVALx
A2014-04-011
A2014-03-013
A2014-02-012
A2014-01-018
B2014-04-011
B2014-02-013
B2014-03-014
C2014-02-016
C2014-01-011
C2014-01-013
D2014-02-016
D2014-01-013

В ответе нужно получить:
CATx
A
B

Условие:
в группах CATx значение Valx=1 у последней записи по дате Datex
30 апр 14, 15:33    [15959295]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом выбора по группам  [new]
Кавказ-сила
Member

Откуда: Москва
Сообщений: 261
select CATx from (
select CATx, Datex, VALx, row_number() over(partition by CATx order by Datex desc) n
from mytable ) t
where n = 1 and VALx = 1
30 апр 14, 15:40    [15959350]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом выбора по группам  [new]
Bagir
Member

Откуда:
Сообщений: 52
Огромное спасибо! Работает отлично. К сожалению я пока еще сам до конца понимаю как он работает, но скоро разберусь. Вы меня очень выручили.
30 апр 14, 15:57    [15959475]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом выбора по группам  [new]
Bagir
Member

Откуда:
Сообщений: 52
Не зная ранее row_number, я пробовал выкрутить нечто подобное из того небольшого словаря, которым сейчас владею. Функцию изучил. Простая и очень полезная. Теперь я умею немного больше :)
30 апр 14, 17:20    [15959931]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом выбора по группам  [new]
Tаrantino
Member

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

Купи вот эту книгу: http://www.ozon.ru/context/detail/id/19604018/
30 апр 14, 17:31    [15959972]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом выбора по группам  [new]
Volochkova
Member

Откуда:
Сообщений: 2321
Bagir
Исходная таблица:
CATxDatexVALx
A2014-04-011
A2014-03-013
A2014-02-012
A2014-01-018
B2014-04-011
B2014-02-013
B2014-03-014
C2014-02-016
C2014-01-011
C2014-01-013
D2014-02-016
D2014-01-013

В ответе нужно получить:
CATx
A
B

Условие:
в группах CATx значение Valx=1 у последней записи по дате Datex


В ответе должно быть A, B, C.

Разве не так?
4 май 14, 12:31    [15968810]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом выбора по группам  [new]
Volochkova
Member

Откуда:
Сообщений: 2321
Пардон, поняла.
4 май 14, 12:32    [15968812]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом выбора по группам  [new]
Volochkova
Member

Откуда:
Сообщений: 2321
create table #tmp_t (CATx varchar(10), 	Datex smalldatetime,	VALx int)
insert into #tmp_t Values
('A',	'2014-04-01',	1),
('A',	'2014-03-01',	3),
('A',	'2014-02-01',	2),
('A', '2014-01-01',	8),
		
('B',	'2014-04-01',	1),
('B',	'2014-02-01',	3),
('B',	'2014-03-01',	4),
		
('C',	'2014-02-01',	6),
('C',	'2014-01-01',	1),
('C',	'2014-01-01',	3),
		
('D',	'2014-02-01',	6),
('D',	'2014-01-01',	3)

Select
	t.CATx , 	t.Datex ,	t.VALx
From 
	#tmp_t t
	Inner join (Select CATx, Max (Datex) As DMax  From #tmp_t  Group by CATx) K on t.CATx = k.CATx and t.Datex = k.DMax 
Where
	t.VALx = 1

drop table #tmp_t


Можно и так.
4 май 14, 13:00    [15968863]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить