从次要视图中获取最新项目的数量

时间:2016-11-01 10:35:44

标签: sql sql-server

我在构建一个有点高级的查询时遇到了问题。

我有两种观点 - 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

1 个答案:

答案 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;