У меня есть проблема, когда мне нужно запросить базу данных, которая включает в себя несколько строк торговой активности за последние 90 дней. В настоящее время запрос строится для определения средней суммы за 90-дневный период - поэтому каждый день имеет одно значение воздействия, и запрос помогает нам определить среднее значение за 90 дней, просто суммируя ежедневные значения, а затем делив на 90. делает это по мере продвижения даты, поэтому значение обновляется каждый день, когда выполняется запрос.
Вышеуказанное достаточно просто для выполнения, но теперь мне нужно определить средние суммы на конец месяца за последние 3 месяца. Я выяснил, как получить только даты окончания месяца, но не уверен, как объединить это с текущим запросом. Кроме того, необходимо иметь возможность самостоятельно обновляться.
/* Test query below */
DECLARE @Date DATETIME = Getdate()
DECLARE @daycount INT = 90
DECLARE @startDate DATETIME = Dateadd(dd, @daycount*-1, @Date)
SELECT sub.Instrument,
( Sum(sub.GrossExposure) / @daycount ) AS AvgGrossExposure
FROM (SELECT DateField,
Instrument,
GrossExposure
FROM table
WHERE DateField <= @Date
AND Datefield >= @startDate
) sub
GROUP BY Instrument
Чтобы рассчитать конец месяца за последние 90 дней, я возился с этим, но он также включает сегодняшнюю дату, и в этом случае мне не нужно это значение.
/* Test query for month-end dates, past 90 days */
DECLARE @Date DATETIME = GetDate()
DECLARE @daycount INT = 90
DECLARE @startDate DATETIME = Dateadd(dd, @daycount*-1, @Date)
SELECT max(datefield) AS month_ends
FROM table
WHERE datefield <= @Date
AND datefield >= @startDate
GROUP BY month(datefield),
year(datefield)
ORDER BY month_ends