2016-11-01 4 views
0

У меня возникла проблема с созданием несколько расширенного запроса.Получение количества последних элементов из вторичного представления

У меня есть две точки зрения - и B где B является дочерним .

Это соотношение обрабатывается

  • A vw_StartDate.MapToID

    =

  • Б vw_TrackerFeaturesBasic.StartDateMapToID.

Что мне нужно сделать, это взять каждый родитель и подсчетом Последние добавленные детей B.

Это запрос, который получает последнюю версию детей B в SSRS-отчет: (Это не использует на всех!):

/****** 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 + SUM).

Поскольку 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

Ваш вопрос немного трудно следить, потому что я не вижу отношения между вашими запросами и этот запрос:

Что мне нужно сделать, это взять каждый родитель А и подсчет из последних добавленных детей 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; 
+0

Извините. Я просто не уверен, как сформулировать хороший вопрос о SQL. Я попытался скопировать ответ, но не получил ожидаемых результатов. В принципе, мне нужен запрос, который захватывает каждого родителя и количество подходящих (ApplicableToProject) и неполных (ReadyForWork) строк последнего (MAX (DateStamp)) вставленного дочернего элемента. Каждый ребенок имеет вышеупомянутые поля, и каждый из них должен получить счет последнего вставленного ребенка, где указаны вышеприведенные поля = 1, ready = 0. – geostocker

+0

@geostocker. , , Вы должны задать другой вопрос с соответствующими данными выборки и желаемыми результатами. –

Смежные вопросы