Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
elu Member Откуда: Сообщений: 2 |
Добрый день, помогите, имеется таблица с данными: P_Nazv Data_Op Cena P1 01/01/2014 100 P1 10/03/2014 120 P1 15/04/2014 110 P2 05/01/2014 100 P2 25/10/2014 130 P3 06/03/2014 170 P4 01/03/2014 250 P4 12/06/2014 220 P5 08/08/2014 500 ..... Нужно выбрать кажды продукт с самой новой ценной: P1 15/04/2014 110 P2 25/10/2014 130 P3 06/03/2014 170 P4 12/06/2014 220 P5 08/08/2014 500 Спасибо :) |
19 дек 14, 12:23 [17022222] Ответить | Цитировать Сообщить модератору |
PaulYoung Member Откуда: Москва Сообщений: 2565 |
DECLARE @t TABLE (P_Nazv CHAR(2), Data_Op DATETIME, Cena MONEY) INSERT @t (P_Nazv, Data_Op, Cena) SELECT 'P1', '20140101', 100 UNION ALL SELECT 'P1', '20140310', 120 UNION ALL SELECT 'P1', '20140415', 110 UNION ALL SELECT 'P2', '20140105', 100 UNION ALL SELECT 'P2', '20141025', 130 UNION ALL SELECT 'P3', '20140306', 170 UNION ALL SELECT 'P4', '20140301', 250 UNION ALL SELECT 'P4', '20140612', 220 UNION ALL SELECT 'P5', '20140808', 500 SELECT t1.P_Nazv, t1.Data_Op, t1.Cena FROM @t t1 WHERE t1.Data_Op = ( SELECT MAX(t2.Data_Op) FROM @t t2 WHERE t2.P_Nazv = t1.P_Nazv ) ORDER BY t1.P_Nazv |
19 дек 14, 12:38 [17022345] Ответить | Цитировать Сообщить модератору |
elu Member Откуда: Сообщений: 2 |
PaulYoung, Спасибо, как всё просто... как не додумался :) |
19 дек 14, 12:50 [17022423] Ответить | Цитировать Сообщить модератору |
alukardD Member Откуда: USSR Сообщений: 3369 |
иль как вариант
|
|
19 дек 14, 12:52 [17022436] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
elu, С оконными функциями будет так (что уже многократно обсуждалось): DECLARE @t TABLE (P_Nazv CHAR(2), Data_Op DATETIME, Cena MONEY) INSERT @t (P_Nazv, Data_Op, Cena) SELECT 'P1', '20140101', 100 UNION ALL SELECT 'P1', '20140310', 120 UNION ALL SELECT 'P1', '20140415', 110 UNION ALL SELECT 'P2', '20140105', 100 UNION ALL SELECT 'P2', '20141025', 130 UNION ALL SELECT 'P3', '20140306', 170 UNION ALL SELECT 'P4', '20140301', 250 UNION ALL SELECT 'P4', '20140612', 220 UNION ALL SELECT 'P5', '20140808', 500 ; with A as ( select * ,row_number() over(partition by P_Nazv order by Data_Op desc) as rn from @t ) select P_Nazv, Data_Op, Cena from A where rn=1 Результат: P_Nazv Data_Op Cena |
19 дек 14, 14:29 [17023246] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
elu, читай, выбирай... |
19 дек 14, 17:55 [17024991] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |