У меня есть эта таблица называется продажи:года до настоящего времени в месяц
ID Date DepartmentID Amount 1 10-12-2009 12 10 2 18-01-2010 3 23 3 08-02-2010 4 7 ...
Теперь мне нужно получить значения из с началом года столбца Суммы для каждого месяца и отдела.
Сначала я попробовал этот запрос:
SELECT MonthSales.[Month], MonthSales.DepartmentID,
(SELECT SUM(SalesAmount.Amount) FROM Sales AS SalesAmount
WHERE (SalesAmount.[Date] >= DATEADD(Month, -12, MonthSales.[Month])
AND SalesAmount.[Date] < DATEADD(Month, 1, MonthSales.[Month]))
AND SalesAmount.DepartmentID = MonthSales.DepartmentID) AS Amount
FROM (SELECT dateadd(month, datediff(month, 0, [Date]),0) AS [Month], DepartmentID
FROM Sales) AS MonthSales
GROUP BY MonthSales.[Month], MonthSales.DepartmentID
Но это возвращается Внутренняя SQL ошибка сервера
Чтобы обойти эту ошибку, я написал следующий запрос:
SELECT CompareSales.StartDate, CompareSales.EndDate, CompareSales.DepartmentID,
(SELECT SUM(SalesAmount.Amount) FROM Sales AS SalesAmount
WHERE (SalesAmount.[Date] >= CompareSales.StartDate AND SalesAmount.[Date] <
DATEADD(Month, 1, CompareSales.EndDate))
AND SalesAmount.DepartmentID = CompareSales.DepartmentID) AS Amount
FROM (SELECT DATEADD(Month, -12, PeriodSales.EndDate) AS StartDate,
PeriodSales.EndDate, PeriodSales.DepartmentID
FROM (SELECT DISTINCT bms.DATESERIAL(DATEPART(Year, EndSales.[Date]), DATEPART
(Month, EndSales.[Date]), 1) AS EndDate, EndSales.DepartmentID
FROM Sales AS EndSales) AS PeriodSales) AS CompareSales
GROUP BY CompareSales.StartDate, CompareSales.EndDate, CompareSales.DepartmentID
ORDER BY CompareSales.StartDate
Этот запрос возвращал исправить год к настоящему времени суммы за каждый месяц, но требуется 6 минут для обработки всех 4800 записей. Это слишком медленно, конечно. Может ли кто-нибудь помочь мне в направлении запроса, который вернет суммы с начала года в течение приемлемого времени (< 30 секунд)?
Спасибо,
Боб
Были ли у вас взгляды на ваши индексы, чтобы увидеть, есть ли какие-либо возможности, которые вы могли бы использовать или создавать? –
Вы ищете год с даты (с начала года) или последние 12 месяцев? –
Последние 12 месяцев. И мне нужны записи с суммой последних 12 месяцев за каждый месяц каждого года. Так, например, строка для jan-2010 с общей суммой от feb-2009 до jan-2010. –