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

Откуда:
Сообщений: 3
здравствуйте!
имеется таблицы Car, Price, Vendor, Model
пользователь устанавливает фильтры и относительно их должна выбираться коллекция автомобилей Car.
В случае с ценой, то у пользователя есть возможность установить на какую дату показать цену. То есть таблица Price содержит все изменения цен на автомобиль и записей с повторяющимся полем CarId может быть много.

Price
---------------
Id | int
CarId | int
Price | decimal
Date | datetime

Car
---------------
Id |int
ModelId|int
......

Model
--------------
Id |int
VendorId |int
Name | nvarchar

Vendor
--------------
Id |int
Name | nvarchar

помогите кто может.. если дадите хорошую ссылку где можно доступно почитать тоже буду благодарен
16 фев 12, 18:16    [12105392]     Ответить | Цитировать Сообщить модератору
 Re: хитрый запрос. помогите создать...  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 726
mykhailovskyi,
вот тут: "установить на какую дату показать цену"
какую цену если в етот день было 10 изменений цены?
Т.е. с утра он стоил $5 в 10 часов $6 ну а к вечеру $18.
Ответ даст Вам решение
16 фев 12, 18:23    [12105443]     Ответить | Цитировать Сообщить модератору
 Re: хитрый запрос. помогите создать...  [new]
mykhailovskyi
Member

Откуда:
Сообщений: 3
читал, смотрел форумы и нашел такой выход. создаю процедуру
CREATE PROCEDURE GetPriceById(@CarId int, @Date DateTime)
AS
BEGIN
	Select TOP 1 * from Price
	where Price.CarId = @CarId And Price.Date <= @Date
	order by Price.Date desc
END


она вернет мне нужную запись с ценой.
теперь не знаю как мне присвоить в следующей выборке полю Цена из того, что вернет GetPriceById
select Model.Name as 'Модель'
		,Vendor.Name as 'Vendor'
		,Car.Capacity
		,Car.Description
		,Price.Price
		--,Price.Price, Price.Date
	from Car
		INNER Join Model
			on(Car.ModelId = Model.Id)
		INNER Join Vendor
			on(Vendor.Id = Model.VendorId)
		INNER Join Price (GetPriceById(Car.Id, @Date))
	on (Price.CarId = Car.Id)
18 фев 12, 12:40    [12114968]     Ответить | Цитировать Сообщить модератору
 Re: хитрый запрос. помогите создать...  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6202
mykhailovskyi
теперь не знаю как мне присвоить в следующей выборке полю Цена из того, что вернет GetPriceById

Выкинуть ХП и использовать cross apply.
18 фев 12, 13:02    [12115034]     Ответить | Цитировать Сообщить модератору
 Re: хитрый запрос. помогите создать...  [new]
mykhailovskyi
Member

Откуда:
Сообщений: 3
Сон Веры Павловны, простите за нубство, но я не понял. не могли бы вы привести пример?
буду очень благодарен. на этом застряла разработка. Остальная функциональность шустро и на EF работает.
Надо только этот запрос до ума довести
18 фев 12, 13:35    [12115116]     Ответить | Цитировать Сообщить модератору
 Re: хитрый запрос. помогите создать...  [new]
Сон Веры Павловны
Member

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

http://www.t-sql.ru/post/CrossApply.aspx
18 фев 12, 13:44    [12115140]     Ответить | Цитировать Сообщить модератору
 Re: хитрый запрос. помогите создать...  [new]
artichoke_mebel
Member

Откуда:
Сообщений: 1
++
18 фев 12, 17:04    [12115821]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить