这种情况可能无济于事,但万一它是:我正在为寄养服务中的客户处理安置记录。如果客户离开家中获得喘息,或者他们的费率改变,或者他们改变了养父母,或者他们改变了子计划,或者由于其他一些原因,他们也会改变。我试图确定最早的布置开始日期,该日期与当前的父母,比率和子程序相同(并且不会暂停)。
我创建了一个视图,该视图的最大放置位置不具有RSPT状态。我现在正尝试使用以下代码查找他们最早到过该位置:
SELECT MAX(PL.[PLCMNT ST DT]) AS MaxStDt,
PL.ProgID
FROM dbo.PlacementLog AS PL
INNER JOIN dbo.ProgramLog AS PR ON
PL.ProgID = PR.[PROGRAM KEY]
WHERE (PR.[PROGRAM CODE] = 29) AND
(PL.PlcmntStatus <> N'RSPT') AND
(PL.[PLCMNT ST DT] <
(SELECT MaxStartDate
FROM dbo.FcMaxNonRespPlcmntS2 AS FCM
WHERE (ProgID = PL.ProgID) AND
(RCode = PL.[RATE CODE]) AND
(FosFamID = PL.FosFamID) AND
(SubProg = PL.SubProg)))
GROUP BY PL.ProgID,
PL.SubProg,
PL.[RATE CODE],
PL.FosFamID
我得到的子查询返回了多个值。这是不允许的...错误。我对自己做错的事情有任何见解吗?此外,是否有一种方法可以向此代码添加一个案例,说明是否不存在早期放置,请列出FcMaxNonRespPlcmntS2中的最大放置?
感谢您的任何帮助
您可以使用TOP 1
和ORDER BY
SELECT MAX(PL.[PLCMNT ST DT]) AS MaxStDt, PL.ProgID
FROM dbo.PlacementLog AS PL INNER JOIN
dbo.ProgramLog AS PR ON PL.ProgID = PR.[PROGRAM KEY]
WHERE (PR.[PROGRAM CODE] = 29) AND (PL.PlcmntStatus <> N'RSPT') AND (PL.[PLCMNT ST DT] <
(SELECT TOP 1 MaxStartDate
FROM dbo.FcMaxNonRespPlcmntS2 AS FCM
WHERE (ProgID = PL.ProgID) AND (RCode = PL.[RATE CODE]) AND (FosFamID = PL.FosFamID) AND (SubProg = PL.SubProg)
ORDER BY MaxStartDate DESC))
GROUP BY PL.ProgID, PL.SubProg, PL.[RATE CODE], PL.FosFamID
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句