2016-11-01 1 views
0

Ich habe ein Problem beim Erstellen einer etwas fortgeschrittenen Abfrage.Anzahl der neuesten Elemente aus der sekundären Ansicht abrufen

Ich habe zwei Ansichten - A und B wo B das Kind von A ist.

Diese Beziehung wird durch

  • A vw_StartDate.MapToID

    =

  • B vw_TrackerFeaturesBasic.StartDateMapToID behandelt wird.

Was ich tun müssen, um alle Eltern greifen A und eine Zählung der AKTUELLEN hinzugefügt Kinder B.

Dies ist eine Abfrage, die Kinder um die neuesten B in einem SSRS-Bericht wird: (Dieser nicht überhaupt nicht verwenden 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 

ich ein paar verschiedene Möglichkeiten versucht haben, , aber ich kann nicht herausfinden, wie ich die zuletzt hinzugefügten Kinder aus der Unterabfrage erhalte (ich habe hauptsächlich eine Unterabfrage verwendet, die in COUNT/Case + SUM eingebettet ist).

Da SQL Server uns nicht wirklich erlaubt, Aggregatfunktionen in Aggregatfunktionen zu verwenden, bin ich nicht sicher, wie das zuletzt hinzugefügte Element in einer Unterabfrage erhalten wird, da die Unterabfrage höchstwahrscheinlich in COUNT oder ähnlichem verschachtelt sein muss .

Nachfolgend finden Sie eine Version arbeite ich an (nicht funktioniert):

Spalte ‚vw_TRK_TrackerFeaturesBasic.StartDateMapToID‘ in der Auswahlliste ungültig ist, weil es in einer Aggregatfunktion nicht enthalten ist oder die GROUP BY-Klausel.

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 

Antwort

0

Ihre Frage ist ein bisschen schwer zu folgen, weil ich nicht eine Beziehung zwischen Ihre Fragen und Anfrage unter:

Was ich tun muss, ist greifen alle Eltern A und eine Zählung der neuesten hinzugefügt Kinder B.

auf dieser Aussage Fokussierung, können Sie diese leicht mit Fensterfunktionen tun:

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

Entschuldigung. Ich bin mir einfach nicht sicher, wie ich eine gute Frage zu SQL formulieren soll. Ich habe versucht, deine Antwort zu kopieren, aber ich habe nicht die erwarteten Ergebnisse erhalten. Grundlegend was ich brauche, ist eine Abfrage, die jedes Elternteil und eine Anzahl der zutreffenden (ApplicableToProject) und unvollständigen (ReadyForWork) Zeilen des letzten (MAX (DateStamp)) eingefügten Kinds erfasst. Jedes Kind hat die oben genannten Felder und jedes ich muss eine Zählung des zuletzt eingefügten Kindes erhalten, wo die obigen Felder anwendbar sind = 1, bereit = 0. – geostocker

+0

@geostocker. . . Sie sollten eine andere Frage mit geeigneten Beispieldaten und gewünschten Ergebnissen stellen. –

Verwandte Themen