2016-02-03 3 views
0

Что я надеюсь сделать здесь, чтобы создать T-SQL, который найдет конкретную запись и отобразит соответствующие прогнозы для этой конкретной записи. А также отобразите среднее из трех предыдущих раз, когда произошла запись.Найти запись - затем Среднее число «Х» Число предыдущих событий

В приведенном ниже запросе, событие должно было произойти на 10/7/2015 и имел две проекции 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' 

Ниже приведены результаты, - которые, как ожидалось, и появляются правильно:

Current Drive

во втором запросе, я отображая три предыдущий раз происходило то же событие в этом месте и был отмечен в полном состоянии.

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; 

Past 3 Drives

Это не то, что я ищу. Вместо трех отдельных дисков, я бы хотел, чтобы он отображался в соответствии со средним числом последних трех дисков.

Если возможно, то, что я хотел бы произойти, это происходит в одном из утверждений, так что отображает «предстоящий» диск, который должен был произойти 10/7/2015, а затем в вычисленных столбцах - в среднем три предыдущих прогноза из место события.

Надеюсь, это имеет смысл.

+0

Совет. Полезно пометить вопросы базы данных как с помощью соответствующего программного обеспечения (MySQL, Oracle, DB2, ...) и версии, например. 'SQL-сервер-2014'. Различия в синтаксисе и особенностях часто влияют на ответы. – HABO

ответ

0

Если я правильно вас понимаю, как сделать второй запрос в качестве подзапроса в первом и усреднить его результаты там. Что-то вроде этого:

-- 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, если вы хотите, тоже. Но, надеюсь, это дает вам представление.

+0

Спасибо, похоже, что это сработает, но я проверю его позже и дам вам знать. Цените ответ. – MISNole

+0

Спасибо, это сработало. – MISNole