查找记录 - 然后平均 "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 添加第二个子查询。但希望这能给你一个想法。
我希望在这里完成的是创建 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 添加第二个子查询。但希望这能给你一个想法。