Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите с простым запросом...  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простым запросом...  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простым запросом...  [new]
elu
Member

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

Спасибо, как всё просто... как не додумался :)
19 дек 14, 12:50    [17022423]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простым запросом...  [new]
alukardD
Member

Откуда: USSR
Сообщений: 3369
иль как вариант
+

create table #Res
(
P_Nazv varchar(20),
Data_Op date,
Cena int
)

insert into #Res values(
'P1','2014-01-01',100)

insert into #Res values(
'P1','2014-03-10',120)

insert into #Res values(
'P1','2014-04-15',110)

insert into #Res values(
'P2','2014-01-05',100)

insert into #Res values(
'P2','2014-10-25',130)

insert into #Res values(
'P3','2014-03-06',170)

insert into #Res values(
'P4','2014-03-01',250)

insert into #Res values(
'P4','2014-06-12',220)

insert into #Res values(
'P5','2014-08-08',500)

select MIN(Data_Op),t.P_Nazv from #Res t
group by t.P_Nazv
19 дек 14, 12:52    [17022436]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простым запросом...  [new]
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
P1 2014-04-15 00:00:00.000 110,00
P2 2014-10-25 00:00:00.000 130,00
P3 2014-03-06 00:00:00.000 170,00
P4 2014-06-12 00:00:00.000 220,00
P5 2014-08-08 00:00:00.000 500,00
19 дек 14, 14:29    [17023246]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простым запросом...  [new]
Добрый Э - Эх
Guest
elu,

читай, выбирай...
19 дек 14, 17:55    [17024991]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить