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

Откуда:
Сообщений: 23
Вечер добрый. Господа эксперты, подскажите, как корректно выбрать из интервала обороты только по минимальным ценам (при условии что они равны). Подозреваю. что нужно использовать функцию MIN, но как именно пока не догадался. Пример таблицы приложил в скрине.

К сообщению приложен файл. Размер - 21Kb
20 июл 16, 20:05    [19432829]     Ответить | Цитировать Сообщить модератору
 Re: Выборка оборота по минимальным ценам  [new]
mittagswind
Member

Откуда:
Сообщений: 117
неудивительно что никто не взялся помогать. вы распишите хоть немного подробнее что должно получиться, пример того что в результате хочется нарисуйте.

код ниже для каждой позиции без учета временных интервалов найдет минимальные цены, потом просуммирует оборот по найденным строкам:
create table #t([Дата прихода] date, [Позиция] nvarchar(50), [Цена] numeric(15, 2), [Оборот] numeric(15, 2))

insert into #t([Дата прихода], [Позиция], [Цена], [Оборот])
values 
	('20160706', 'Позиция1', 200, 10000),
	('20160708', 'Позиция1', 200, 20000),
	('20160709', 'Позиция2', 175.75, 5000),
	('20160713', 'Позиция2', 175.75, 12000),
	('20160716', 'Позиция1', 300, 4000)
		
-- исходная выборка
select * from #t

-- вычисления
select src.[Позиция], sum(src.[Оборот]) as [СуммарныйОборот]
from
(	select t.*, 
	dense_rank() over (partition by t.[Позиция] order by [Цена] asc) as RwNo
	from #t as t
) src
where src.RwNo = 1
group by src.[Позиция]

drop table #t
21 июл 16, 16:37    [19437683]     Ответить | Цитировать Сообщить модератору
 Re: Выборка оборота по минимальным ценам  [new]
ИгорьST
Member

Откуда:
Сообщений: 23
Добрый день.
Оно. Спасибо! Первое, кажущее логичным решение в данном случае оказалось верным. Несколько новых для меня конструкций. Пойду изучать.
21 июл 16, 18:51    [19438312]     Ответить | Цитировать Сообщить модератору
 Re: Выборка оборота по минимальным ценам  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
select t1.[Позиция],sum(t1.[Оборот]) as [СуммарныйОборот]
from #t t1
join(
select [Позиция],min([Цена]) [Цена_Мин]
from #t
group by [Позиция]
) t on t1.[Цена]=t.[Цена_Мин]
group by  t1.[Позиция]
21 июл 16, 19:03    [19438330]     Ответить | Цитировать Сообщить модератору
 Re: Выборка оборота по минимальным ценам  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
select t1.[Позиция],sum(t1.[Оборот]) as [СуммарныйОборот]
from #t t1
join(
select [Позиция],min([Цена]) [Цена_Мин]
from #t
group by [Позиция]
) t on t1.[Позиция] = t.[Позиция] and t1.[Цена]=t.[Цена_Мин]
group by  t1.[Позиция]
21 июл 16, 19:16    [19438367]     Ответить | Цитировать Сообщить модератору
 Re: Выборка оборота по минимальным ценам  [new]
ИгорьST
Member

Откуда:
Сообщений: 23
Спасибо, за еще одни вариант с подзапросом. Он понятнее. Знакомые методы. Его и использовал. Я так понимаю более переносимое решение.
23 июл 16, 09:56    [19444783]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить