MS SQL Как вывести полученную сумму за месяц?

Рейтинг: 0Ответов: 1Опубликовано: 19.05.2023

Написал запрос который в теории должен выводить сумму которая доставка заработала за месяц(5) ->

SELECT SUM(Products.Price * OrdersProducts.Quantity) AS 'SUM'
FROM Products, OrdersProducts
WHERE MONTH(Orders.Date_Order) = 5 AND YEAR(Orders.Date_Order) = YEAR(getdate())

Только на практике не работает потому что не как не связал Orders.Date_Order, можете пожалуйста подсказать как можно связаться с Orders.Date_Order

Ответы

▲ 1Принят

А как вы учитываете изменение цен со временем? Цена бы по идее должна либо с заказом вместе храниться, либо должна быть таблица истории цен.
Если у вас в заказах есть индекс по дате, то накладывая функции поля даты индекс использовать не будет.
В целом ваш запрос должен быть каким-то таким:

SELECT SUM(p.price * op.quantity) AS sum
FROM OrdersProduct AS op
INNER JOIN Products AS p ON (
    p.id = op.product_id
)
WHERE op.date_order BETWEEN '2023-05-01' AND '2023-05-31'

В общем для использования индекса (при наличии, конечно) манипуляции с датами надо на параметры перенести, а не на поле таблицы. И если дата это все же дата-время, то конец интервала это 2023-05-31 23:59:59. Либо как вариант - вместо between можно использовать неравенства и собрать дату:

WHERE op.date_order >= DATEFROMPARTS(YEAR(GETDATE()), 5, 1)
    AND op.date_order < DATEFROMPARTS(YEAR(GETDATE()), 6, 1)