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

Откуда: Санкт-Петербург
Сообщений: 322
Добрый день.

Есть у меня в БД Access такой запрос, называемый "Закупочные цены", содержащий Код продукта и его Последнюю закупочную цену. Его SQL:

SELECT 
ProductID, 
LAST(Price) AS LastBuyPrice
FROM tblArrivalsProducts 
GROUP BY ProductID


Таблица tblArrivalsProducts - это таблица "Поступившие товары", в которой много полей (есть ID, Время добавления и др.)
Вопрос - как адаптировать данный запрос к MS SQL Server, которые не воспринемает групповую операцию LAST?

Заранее спасибо.
10 июн 12, 13:44    [12697430]     Ответить | Цитировать Сообщить модератору
 Re: Адаптация Access запроса, с использованием группой операци LAST, под MS SQL Server  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
select top (1) with ties
 ProductID, 
 Price as LastBuyPrice
from
 tblArrivalsProducts 
order by
 row_number() over (partition by ProductID order by <Критерий, определяющий "последнесть" цены> desc)
10 июн 12, 13:59    [12697466]     Ответить | Цитировать Сообщить модератору
 Re: Адаптация Access запроса, с использованием группой операци LAST, под MS SQL Server  [new]
Игорь1973
Member

Откуда: Санкт-Петербург
Сообщений: 322
Спасибо. Однако это довольно специфический для MS SQL синтаксис.
А есть ли способ в рамках ANSI92 ?
Ну, чтобы под MS SQL Server 2000 работало (а также и в каких-то других СУБД в перспективе)?
Я вижу решение с подзапросам select в скобках, но что-то это мне не нравится.
10 июн 12, 14:06    [12697481]     Ответить | Цитировать Сообщить модератору
 Re: Адаптация Access запроса, с использованием группой операци LAST, под MS SQL Server  [new]
Игорь1973
Member

Откуда: Санкт-Петербург
Сообщений: 322
Вот мое решение с подзапросом

SELECT ID, 
(select top 1 Price from tblArrivalsProducts where tblArrivalsProducts.ProductID = tblProducts.ID order by tblArrivalsProducts.ID desc) AS LastBuyPrice
FROM tblProducts


но теория учит нас, что подзапрос - это ведь всегда плохо с тз производительности.
10 июн 12, 14:12    [12697490]     Ответить | Цитировать Сообщить модератору
 Re: Адаптация Access запроса, с использованием группой операци LAST, под MS SQL Server  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
Игорь1973,

1. В ANSI 92 у инструкции select нету фразы top.
2. Производительность оценивают по плану выполнения, а не по наличию или отсутствию тех или иных языковых конструкций.
3. Совершенно не обязательно, что один и тот же запрос будет работать одинаково быстро на разных СУБД. Так что, если волнует производительность, таки придется при написании запросов использовать специфические возможности конкретных СУБД.
10 июн 12, 14:27    [12697506]     Ответить | Цитировать Сообщить модератору
 Re: Адаптация Access запроса, с использованием группой операци LAST, под MS SQL Server  [new]
Игорь1973
Member

Откуда: Санкт-Петербург
Сообщений: 322
Согласен с вами полностью по всем пунктам.
Спасибо за помощь ))
10 июн 12, 15:04    [12697563]     Ответить | Цитировать Сообщить модератору
 Re: Адаптация Access запроса, с использованием группой операци LAST, под MS SQL Server  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
А
автор
row_number() over (partition нет
в MS SQL 2000
10 июн 12, 16:15    [12697630]     Ответить | Цитировать Сообщить модератору
 Re: Адаптация Access запроса, с использованием группой операци LAST, под MS SQL Server  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
В нем, это начинается с 2005
10 июн 12, 17:35    [12697718]     Ответить | Цитировать Сообщить модератору
 Re: Адаптация Access запроса, с использованием группой операци LAST, под MS SQL Server  [new]
qwerty112
Guest
Игорь1973
Добрый день.

Есть у меня в БД Access такой запрос, называемый "Закупочные цены", содержащий Код продукта и его Последнюю закупочную цену. Его SQL:

SELECT 
ProductID, 
LAST(Price) AS LastBuyPrice
FROM tblArrivalsProducts 
GROUP BY ProductID


Таблица tblArrivalsProducts - это таблица "Поступившие товары", в которой много полей (есть ID, Время добавления и др.)
Вопрос - как адаптировать данный запрос к MS SQL Server, которые не воспринемает групповую операцию LAST?

Заранее спасибо.


и ты думаеш, этот запрос показует последнюю, по дате, цену для ProductID ??? бугага
11 июн 12, 00:35    [12698328]     Ответить | Цитировать Сообщить модератору
 Re: Адаптация Access запроса, с использованием группой операци LAST, под MS SQL Server  [new]
qwerty112
Guest
Игорь1973,

12692600

зы
там ещё нехватает 2-х запросов, с ALL / ANY, для полноты картины :)
11 июн 12, 00:47    [12698340]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить