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

Откуда:
Сообщений: 409
Здравствуйте!
Помогите, пожалуйста, правильно написать хранимую процедуру.
Эта часть процедуры вытаскивает значения из пяти полей трёх связанных между собой таблиц. К этому всему нужно добавить ещё 2 поля из четвёртой таблицы. Это таблица цен и для каждого Car в ней есть несколько значений цены, только даты разные.
CREATE PROCEDURE GetAllCars
AS   
SELECT b.brandOfCar as Brands, m.nameModel as Models, c.color, c.volumeOfEngine, c.Description 
FROM Cars c
	join Models m on c.ModelId = m.IdModel
	join Brands b on c.brandId = b.IdBrand
ORDER BY Models, Brands;
Мне нужны только последние значения цен по дате для каждого Car. Для этого я использую такую конструкцию :
SELECT *
FROM
(
SELECT IdCar, price, datePrice, ROW_NUMBER() OVER (PARTITION BY CarId ORDER BY datePrice DESC) AS xColumns FROM Prices Join Cars on Prices.CarId = Cars.IdCar
) x
WHERE xColumns=1
Мне нужно два этих селекта сцепить воедине, чтобы одним запросом вернуть все 7 полей.
Как это делается практически, помогите пожалуйста разобраться.
Заранее спасибо!
12 окт 11, 19:32    [11429617]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно сделать запрос?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
CROSS APPLY + TOP(1) + WHERE CarId=... + ORDER BY datePrice DESC
12 окт 11, 20:00    [11429723]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно сделать запрос?  [new]
erman
Member

Откуда:
Сообщений: 409
iap
CROSS APPLY + TOP(1) + WHERE CarId=... + ORDER BY datePrice DESC


Честно говоря не совсем понимаю как писать - можно более подробно.
12 окт 11, 20:14    [11429818]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно сделать запрос?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
erman
iap
CROSS APPLY + TOP(1) + WHERE CarId=... + ORDER BY datePrice DESC


Честно говоря не совсем понимаю как писать - можно более подробно.
Что-то Вы мало пытались - 14 минут всего.
SELECT
 Brands=b.brandOfCar,
 Models=m.nameModel,
 c.color,
 c.volumeOfEngine,
 c.Description,
 p.price
FROM Cars c
JOIN Models m on c.ModelId=m.IdModel
JOIN Brands b on c.brandId=b.IdBrand
CROSS APPLY(SELECT TOP(1) * FROM Prices p WHERE p.CarId=c.IdCar ORDER BY p.datePrice DESC) p
ORDER BY Models, Brands;
12 окт 11, 20:20    [11429840]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно сделать запрос?  [new]
erman
Member

Откуда:
Сообщений: 409
Спасибо большое, работает!
12 окт 11, 20:31    [11429862]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить