【问题标题】:SQL: Selecting columns from most recent child table entrySQL:从最近的子表条目中选择列
【发布时间】:2020-10-21 00:57:58
【问题描述】:

我目前正在尝试找到一种方法来检索表中的所有记录及其最近关联的子记录。简化的表结构如下所示:

Parents        Children
______         ________
Id             Id
Age            ParentId 
               FirstName
               LastName
               DateCreated

我希望所有父母都知道他们最近创建的孩子的名字和姓氏(按DateCreated 排序)。这些表在实践中非常大,我希望通过以下查询来选择所有父母及其所有关联的孩子,这就是我目前所拥有的:

select * from parents p join children c on p.id = c.parentid

然后使用内存中的应用程序代码找到所需的结果。

感谢所有帮助。

【问题讨论】:

  • 样本数据和期望的结果会有所帮助。

标签: sql sql-server tsql date greatest-n-per-group


【解决方案1】:

您可以使用子查询进行过滤:

select p.*, c.firstname, c.lastname
from parents p
inner join children c on c.parentid = p.id
where c.datecreated = (
    select max(c1.datecreated)
    from children c1
    where c1.parentid = c.parentid
) c

另一种选择是横向连接:

select p.*, c.firstname, c.lastname
from parents p
cross apply (
    select top (1) c.*
    from children c
    where c.parentid = p.id
    order by c.datecreated desc
)

【讨论】:

    【解决方案2】:

    如果我理解正确,您可以使用横向连接(即apply):

    select p.*, c.*
    from parents p cross apply
         (select top (1) c.*
          from children c 
          where p.id = c.parentid
          order by c.datecreated desc
         ) c;
    

    为了获得最佳性能,您需要在children(parentid, datecreated desc) 上建立索引。

    【讨论】:

      猜你喜欢
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      • 2021-10-22
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多