SQL SELECT WHERE Ärger irgendwelche Ideen hilfreich

Ich habe zwei Tabellen Eltern und Kind (verwandt als solche auf PK / FK GUID)

Kind hat einen timestempel (das Aufzeichnungsdatum / time).

Was ich tun möchte, bekomme nur den aktuellsten Kinderrekord und den übergeordneten datasatz, für jeden Elternteil.

SELECT dbo_Parents.ParentName, dbo_ChildEntry.CountPropertys, dbo_ChildEntry.DateTimeStamp FROM dbo_Parents INNER JOIN dbo_ChildEntry ON dbo_Parents.ParentID = dbo_ChildEntry.ParentID WHERE ([WHAT SHOULD BE HERE?])) 

Angenommen, Sie wollen den aktuellsten Eintrag, müssen Sie TOP 1 verwenden und bestellen.

 SELECT TOP 1 dbo_Parents.ParentName, dbo_ChildEntry.CountPropertys, dbo_ChildEntry.DateTimeStamp FROM dbo_Parents INNER JOIN dbo_ChildEntry ON dbo_Parents.ParentID = dbo_ChildEntry.ParentID ORDER BY dbo_ChildEntry.DateTimeStamp desc 

Bearbeiten nach der Klärung: "der aktuellste untergeordnete datasatz und der übergeordnete datasatz, für jeden übergeordneten datasatz":

 WHERE dbo_ChildEntry.DateTimeStamp = ( Select Max( dbo_ChildEntry.DateTimeStamp ) from dbo_ChildEntry where dbo_Parents.ParentID = dbo_ChildEntry.ParentId ) 
 WHERE dbo.ChildEntry.DateTimeStamp = ( Select Max( c.DateTimeStamp ) from dbo.ChildEntry c where dbo_Parents.ParentID = c.ParentId ) 
 select p.ParentName, c.CountPropertys, c.DateTimeStamp from ( select max(DateTimeStamp) as DateTimeStamp, ParentID from dbo_ChildEntry group by ParentID) cm inner join dbo_ChildEntry c on cm.DateTimeStamp = c.DateTimeStamp and cm.ParentID = c.ParentID inner join dbo_Parents p on c.ParentID = p.ParentID 

Da hast du geklärt, dass du eine Zeile pro Elternteil möchtest, versuch das. Für jede Zeile sucht sie nach einer untergeordneten Zeile, die einen späteren timestempel hat. In der WHERE-Klausel filtert es auf Zeilen, die kein "nächstes" Kind haben.

 SELECT dbo_Parents.ParentName, cur.CountPropertys, cur.DateTimeStamp FROM dbo_Parents INNER JOIN dbo_ChildEntry cur ON dbo_Parents.ParentID = cur.ParentID LEFT JOIN dbo_ChildEntry next ON dbo_Parents.ParentID = next.ParentID AND next.DateTimeStamp > cur.DateTimeStamp WHERE next.DateTimeStamp is null 

Versuchen

 SELECT dbo_Parents.ParentName, dbo_ChildEntry.CountPropertys, max(dbo_ChildEntry.DateTimeStamp) FROM dbo_Parents INNER JOIN dbo_ChildEntry ON dbo_Parents.ParentID = dbo_ChildEntry.ParentID group by dbo_Parents.ParentName, dbo_ChildEntry.CountPropertys