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

Откуда:
Сообщений: 749
Народ помогите сформировать правильный селект из таблицы
Таблица1
Код товара, дата, цена
002 14.02.2015 45
001 12.05.2015 40
002 14.08.2014 45
001 11.06.2013 35
002 12.12.2015 44
001 12.05.2015 46

Нужно выбрать товар с его ценой по последней дате!!!
но если есть в один и тот же день 2 и более товара с разными ценами - тогда выбирается максимальная цена за этот день
как в нашем примере с товаром 001

Результат выглядит вот так:
Код товара, дата, цена
001 12.05.2015 46
002 12.12.2015 44
MS SQL 2000 !!!!
Всем спасибо..
PS что-то я не могу догнать как это реализовать одним селектом...

select a.id_food, a.xdata AS data, max(b.price) as Price, max(unit) AS unit, MAX(recalcunit) as recalcUnit from
(select max(data) as xdata, id_food from storage where operation = 1 and rashod > 0 group by id_food) a
LEFT join storage b on a.id_food = b.id_food and a.xdata = b.data
Group by a.id_food, a.xdata
ORDER By cast(replace(a.Id_food,'_','') as int)
Вроде так сделал но не уверен ...
8 ноя 16, 16:46    [19871224]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом плз.  [new]
_human
Member

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

select top 1 with ties *
from t
order by row_number() over(partition by kod order by date desc, price desc)
8 ноя 16, 16:51    [19871253]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом плз.  [new]
Valerii
Member

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

MS SQL 2000 !!!
8 ноя 16, 16:54    [19871275]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом плз.  [new]
_human
Member

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

зачем там LEFT JOIN ?!

вот такое не покатит?

select 
	a.id_food
	, max(data) as xdata
	, max(price) as Price
	, max(unit) AS unit
	, MAX(recalcunit) as recalcUnit 
from storage
where operation = 1 and rashod > 0
group by a.id_food, a.xdata
order by cast(replace(a.id_food,'_','') as int)
8 ноя 16, 17:10    [19871356]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом плз.  [new]
кролик-зануда
Guest
_human,
...
, max(data) as xdata
...
group by a.id_food, a.xdata

а чо, бывает, что прокатывает?
8 ноя 16, 17:14    [19871387]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом плз.  [new]
_human
Member

Откуда:
Сообщений: 560
кролик-зануда,

только в високосный год
8 ноя 16, 17:22    [19871445]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом плз.  [new]
aleks2
Guest
Высокое исскуство писания коррелированных запросов утрачено...

select id_food, data, max(price) as Price
  from storage as t
  where operation = 1 and rashod > 0 
       and data = ( select max(data) from storage where operation = 1 and rashod > 0 and id_food = t.id_food )
  group by id_food, data
8 ноя 16, 19:04    [19871881]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом плз.  [new]
Valerii
Member

Откуда:
Сообщений: 749
aleks2,
да, пробовал и это - но не был уверен ...;-)
данных много ...
проверять долго да и не реально
спс
9 ноя 16, 08:31    [19872710]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить