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

Откуда:
Сообщений: 15
Хранимая процедура для вычисление валовой прибыли из таблицы покупки и продажи


USE [ESEP]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID('dbo.esep_ReportSalesMorjaByDate', 'P' ) IS NOT NULL
DROP PROCEDURE dbo.esep_ReportSalesMorjaByDate;
GO

CREATE PROCEDURE [dbo].[esep_ReportSalesMorjaByDate]
@DateStart datetime,
@DateEnd datetime

AS
BEGIN
SET NOCOUNT ON;

SELECT ps.DocumentNum, MAX(ps.DateTime) as 'DateTime', SUM(ps.Quantity * ps.Price) as 'SaleSum',
SUM(ps.Quantity * (SELECT TOP 1 pc.Price
FROM tbl_ProductsComing pc
WHERE pc.ProductsID = ps.ProductsID and pc.DateTime <= ps.DateTime
ORDER BY pc.DateTime DESC)) as 'ComeSum',
c.Name as 'CustomerName', u.Name as 'UserName'
FROM tbl_ProductsSelling ps INNER JOIN tbl_Customers c ON c.ID = ps.CustomersID
INNER JOIN tbl_Users u ON u.ID = ps.UsersID
WHERE ps.DateTime >= @DateStart and ps.DateTime <= @DateEnd
GROUP BY ps.DocumentNum, c.Name, u.Name

END
GO
27 май 18, 22:31    [21444717]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить и ускорить данный запрос  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Jumabaev1,
А все необходимые индексы вы уже создали?

SELECT ps.documentnum, 
       Max(ps.datetime)                                AS 'DateTime', 
       Sum(ps.quantity * ps.price)                     AS 'SaleSum', 
       Sum(ps.quantity * (SELECT TOP 1 pc.price 
                          FROM   tbl_productscoming pc 
                          WHERE  pc.productsid = ps.productsid 
                                 AND pc.datetime <= ps.datetime 
                          ORDER  BY pc.datetime DESC)) AS 'ComeSum', 
       c.NAME                                          AS 'CustomerName', 
       u.NAME                                          AS 'UserName' 
FROM   tbl_productsselling ps 
       INNER JOIN tbl_customers c 
               ON c.id = ps.customersid 
       INNER JOIN tbl_users u 
               ON u.id = ps.usersid 
WHERE  ps.datetime >= @DateStart 
       AND ps.datetime <= @DateEnd 
GROUP  BY ps.documentnum, 
          c.NAME, 
          u.NAME 
29 май 18, 03:28    [21448666]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить