我有一个问题,我需要查询一个数据库,其中包含过去 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