powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите оптимизировать функцию: вывести 'Товар дня' в БД AdventureWorks2017
3 сообщений из 3, страница 1 из 1
Помогите оптимизировать функцию: вывести 'Товар дня' в БД AdventureWorks2017
    #40031716
Larikgg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
«Товар дня» это максимальное количество проданных товаров за выбранный день.
На данный момент вот что у меня есть:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
CREATE OR ALTER FUNCTION productOfTheDay(@day DATE)
RETURNS TABLE 
AS RETURN
( 
SELECT product.Name, m.MaxQty, header.OrderDate 
FROM Production.Product AS product, Sales.SalesOrderDetail AS detail, Sales.SalesOrderHeader AS header,
(SELECT MAX(OrderQty) AS MaxQty FROM Sales.SalesOrderDetail AS detail,
Sales.SalesOrderHeader AS header WHERE header.SalesOrderID = detail.SalesOrderID
AND OrderDate IN (SELECT OrderDate FROM Sales.SalesOrderHeader
WHERE YEAR(@day) = YEAR(OrderDate) 
AND MONTH(@day) = MONTH(OrderDate) 
AND DAY(@day) = DAY(OrderDate))) AS m

WHERE product.ProductID = detail.ProductID 
AND header.SalesOrderID = detail.SalesOrderID 
AND OrderDate IN (SELECT OrderDate FROM Sales.SalesOrderHeader
WHERE YEAR(@day) = YEAR(OrderDate) 
AND MONTH(@day) = MONTH(OrderDate) 
AND DAY(@day) = DAY(OrderDate))
AND detail.OrderQty = m.MaxQty
GROUP by m.MaxQty, product.Name, header.OrderDate
)



Все вроде работает но, если более одного максимального значения запрос умирает.
...
Рейтинг: 0 / 0
Помогите оптимизировать функцию: вывести 'Товар дня' в БД AdventureWorks2017
    #40031735
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Larikgg,

непонятно, зачем так усложнять. Объедините три таблицы я найдите максимум.
Код: sql
1.
2.
3.
YEAR(@day) = YEAR(OrderDate) 
AND MONTH(@day) = MONTH(OrderDate) 
AND DAY(@day) = DAY(OrderDate)


это слишком сложно, если существует индекс по OrderDate, то надо искать в диапазоне от @day до следующий день(@day).
...
Рейтинг: 0 / 0
Помогите оптимизировать функцию: вывести 'Товар дня' в БД AdventureWorks2017
    #40031855
Larikgg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,

Я просто сам не понимаю как это сделать правильно, а это то на что хватило моих знаний)
А как искать в диапазоне? Через BETWEEN?
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите оптимизировать функцию: вывести 'Товар дня' в БД AdventureWorks2017
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]