0

我有两个表父子表(与 PK/FK GUID 相关)

孩子有一个时间戳(记录创建日期/时间)。

我想要做的是只获取最近的子记录和父记录,FOR EACH 父记录。

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?]))
4

5 回答 5

8

假设您想要最近的条目,则必须使用 TOP 1 并排序。

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

澄清后编辑:“最近的子记录和父记录,FOR EACH 父记录”:

WHERE dbo_ChildEntry.DateTimeStamp = 
      ( Select Max( dbo_ChildEntry.DateTimeStamp )
               from dbo_ChildEntry 
               where dbo_Parents.ParentID = dbo_ChildEntry.ParentId )
于 2009-05-19T21:37:45.460 回答
3
WHERE dbo.ChildEntry.DateTimeStamp = ( Select Max( c.DateTimeStamp )
                                         from dbo.ChildEntry c
                                        where dbo_Parents.ParentID = c.ParentId )
于 2009-05-19T21:41:38.340 回答
1
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
于 2009-05-19T21:42:14.983 回答
0

既然你澄清了你希望每个父母一行,试试这个。对于每一行,它都会搜索具有较晚时间戳的子行。在 WHERE 子句中,它过滤没有“下一个”子节点的行。

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
于 2009-05-19T22:00:34.120 回答
-1

尝试

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
于 2009-05-19T21:42:00.083 回答