我在构建一个有点高级的查询时遇到了问题。
我有两种观点 - A 和 B ,其中 B 是 A 的孩子。
此关系由
处理A vw_StartDate.MapToID
=
B vw_TrackerFeaturesBasic.StartDateMapToID。
我需要做的是抓住每个家长 A 以及最新添加的孩子的计数 B 。
这是一个在SSRS报告中获取最新子项 B 的查询:(根本不使用 A !):
/****** Selecting the incomplete, applicable issues of the latest insert. ******/
SELECT DISTINCT [TRK_Feature_LKID]
,[TrackerGroupDescription]
,[ApplicableToProject]
,[ReadyForWork]
,[DateStamp]
FROM [vw_TRK_TrackerFeaturesBasic] as temp
WHERE ApplicableToProject = 1
AND DateStamp = (SELECT MAX(DateStamp) from [vw_TRK_TrackerFeaturesBasic] WHERE [TRK_StartDateID] = @WSCTrackerID AND StartDateMapToID = @HierarchyID AND [TRK_Feature_LKID] = temp.TRK_Feature_LKID )
ORDER BY DateStamp DESC
我尝试了几种不同的方式,但我无法弄清楚如何从子查询中获取最新添加的子项(我主要使用了一个位于COUNT / Case +中的子查询和)。
由于SQL Server并不真正允许我们在聚合函数中使用聚合函数,因此我不确定如何在子查询中获取最新添加的项,因为子查询很可能必须嵌套在COUNT中或类似的东西。
以下是我正在处理的版本(没有工作):
列' vw_TRK_TrackerFeaturesBasic.StartDateMapToID'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
SELECT b.TRK_StartDateID
,(SELECT COUNT(b.TRK_Feature_LKID) FROM b )
FROM vw_TRK_StartDate as a
LEFT JOIN vw_TRK_TrackerFeaturesBasic as b
ON b.StartDateMapToID = a.MapToID AND b.DateStamp = (SELECT MAX(DateStamp) FROM [vw_TRK_TrackerFeaturesBasic] WHERE [TRK_StartDateID] = 47 AND [StartDateMapToID] = 13)
WHERE MapToId = 13
--(SELECT MAX(DateStamp) from [vw_TRK_TrackerFeaturesBasic] WHERE [TRK_StartDateID] = @WSCTrackerID AND StartDateMapToID = @HierarchyID AND [TRK_Feature_LKID] = temp.TRK_Feature_LKID
GROUP BY b.TRK_StartDateID
答案 0 :(得分:0)
您的问题有点难以理解,因为我没有看到您的查询与此请求之间的关系:
我需要做的是抓住每个父母A和最新的计数 加上孩子B。
关注此声明,您可以使用窗口函数轻松完成此操作:
SELECT b.StartDateMapToID, COUNT(*)
FROM (SELECT tfb.*,
MAX(tfb.DateStamp) OVER (PARTITION BY tfb.StartDateMapToID) as max_DateStamp
FROM vw_TRK_TrackerFeaturesBasic tfb
) tfb
GROUP BY b.StartDateMapToID;