查找记录 - 然后平均 "X" 以前出现的次数

Find the Record - Then Average the "X" Number of Previous Occurrences

我希望在这里完成的是创建 T-SQL,它将找到特定记录并显示该特定记录的适当投影。并显示前三次记录发生的平均值。

在下面的查询中,事件发生在 2015 年 10 月 7 日,并且有两个投影 23 和 23。

SELECT
CONVERT(DATE, DM.FromDateTime) AS 'DriveDate',
Acct.InternalName,
DM.LocationID,
DPaCT.ProcedureProjection,
DPaCT.ProductProjection
FROM
dbo.DriveMaster DM
INNER JOIN dbo.Accounts Acct ON DM.AccountID = Acct.AccountID
INNER JOIN dbo.DriveProjectionAndCollectedTotals DPaCT ON DM.DriveID = DPaCT.DriveID
INNER JOIN dbo.DriveStatusDef Stat ON DM.StatusID = Stat.StatusID
WHERE
Acct.AccountID = 17708
AND DM.FromDateTime = '2015-10-07'

这是结果 - 符合预期并且看起来正确:

在第二个查询中,我显示的是前三次同一事件在此位置发生并标记为完整状态。

SELECT TOP 3
CONVERT(DATE, DM.FromDateTime) AS 'DriveDate',
Acct.InternalName,
DM.LocationID,
DPaCT.ProcedureProjection,
DPaCT.ProductProjection
FROM
Hemasphere.dbo.DriveMaster DM
INNER JOIN dbo.Accounts Acct ON DM.AccountID = Acct.AccountID
INNER JOIN dbo.DriveProjectionAndCollectedTotals DPaCT ON DM.DriveID = DPaCT.DriveID
INNER JOIN dbo.DriveStatusDef Stat ON DM.StatusID = Stat.StatusID
WHERE
Acct.AccountID = 17708
AND DM.FromDateTime < '2015-10-07'
AND DM.StatusID = 2
ORDER BY
DM.FromDateTime DESC;

这不是我要找的。我想让它显示在与过去三个驱动器的平均值一致的位置,而不是三个单独的驱动器。

如果可能的话,我希望在一个语句中发生这种情况,以便显示将在 2015 年 10 月 7 日发生的 "upcoming" 驱动器,然后在计算的列中 - 平均三个事件位置的先前预测。

希望这是有道理的。

如果我没理解错的话,如何将第二个查询作为第一个查询的子查询,然后对其结果进行平均?像这样:

-- This is your original query
SELECT
CONVERT(DATE, DM.FromDateTime) AS 'DriveDate',
Acct.InternalName,
DM.LocationID,
DPaCT.ProcedureProjection,
DPaCT.ProductProjection,

--This is the sub-query to get the prior projection average
[PriorProcedureProjectionAverage] = (SELECT AVG(ProcedureProjection) FROM (     
  SELECT TOP 3 DPaCT2.ProcedureProjection
  FROM
  Hemasphere.dbo.DriveMaster DM2
  INNER JOIN dbo.Accounts Acct2 ON DM2.AccountID = Acct2.AccountID
  INNER JOIN dbo.DriveProjectionAndCollectedTotals DPaCT2 ON DM2.DriveID = DPaCT2.DriveID
  INNER JOIN dbo.DriveStatusDef Stat22 ON DM2.StatusID = Stat2.StatusID
  WHERE
  Acct2.AccountID = 17708
  AND DM2.FromDateTime < '2015-10-07'
  AND DM2.StatusID = 2
  ORDER BY
  DM2.FromDateTime DESC;
) As SUB)

FROM
dbo.DriveMaster DM
INNER JOIN dbo.Accounts Acct ON DM.AccountID = Acct.AccountID
INNER JOIN dbo.DriveProjectionAndCollectedTotals DPaCT ON DM.DriveID = DPaCT.DriveID
INNER JOIN dbo.DriveStatusDef Stat ON DM.StatusID = Stat.StatusID
WHERE
Acct.AccountID = 17708
AND DM.FromDateTime = '2015-10-07'

这有点乱,如果您也需要,则必须为 ProductProjection 添加第二个子查询。但希望这能给你一个想法。