如何根据月末日期挑出数据库中的值?
How to single out values in a database based on date being month-end?
我有一个问题,我需要查询一个包含过去 90 天的多个交易行 activity 的数据库。目前,构建查询是为了确定 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
试一试 - 您可以使用常见的 table 表达式使用 EOMONTH(DateField) 附加每个 DateField 值的月末日期,然后在 GROUP BY 中使用它,平均值为每个仪器具有相同 EOMONTH 值的所有 GrossExposure 值。
WITH CTE AS (
SELECT EOMONTH(DateField) AS EndOfMonthDate
,DateField
,Instrument
,GrossExposure
FROM TABLE
WHERE DateField BETWEEN GETDATE()-90 AND GETDATE()
)
SELECT CTE.Instrument,
CTE.EndOfMonthDate,
AVG(CTE.GrossExposure) AS AvgGrossExposure
FROM CTE
GROUP BY CTE.Instrument, CTE.EndOfMonthDate
我有一个问题,我需要查询一个包含过去 90 天的多个交易行 activity 的数据库。目前,构建查询是为了确定 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
试一试 - 您可以使用常见的 table 表达式使用 EOMONTH(DateField) 附加每个 DateField 值的月末日期,然后在 GROUP BY 中使用它,平均值为每个仪器具有相同 EOMONTH 值的所有 GrossExposure 值。
WITH CTE AS (
SELECT EOMONTH(DateField) AS EndOfMonthDate
,DateField
,Instrument
,GrossExposure
FROM TABLE
WHERE DateField BETWEEN GETDATE()-90 AND GETDATE()
)
SELECT CTE.Instrument,
CTE.EndOfMonthDate,
AVG(CTE.GrossExposure) AS AvgGrossExposure
FROM CTE
GROUP BY CTE.Instrument, CTE.EndOfMonthDate