gpt4 book ai didi

SQL:选择按相关子项的属性排序的不同子项

转载 作者:行者123 更新时间:2023-12-01 23:39:53 24 4
gpt4 key购买 nike

我有一个查询,我想在其中检索不同的 child2 行,但按 child1 行的属性排序,这些行由一个共同的父级关联。如果执行以下操作,则会出现错误,因为 ORDERBY 属性不在 DISTINCT 列表中:

select 
distinct c2.Id, c2.Foo, c2.Bar
from Child1 c1
join Parent p on c1.parentId = p.Id
join Child2 c2 on c2.parentId = p.Id
order by c1.Id

但是,如果我将 c1.Id 添加到选择列表中,我将失去 Child 行的独特性,因为 c1.Id 使他们都是不同的。

如果我使用 CTE 或子查询首先进行排序,然后从中选择不同的行,则外部查询不保证它将保持内部/cte 查询的顺序。

有什么办法可以实现吗?

最佳答案

我使用 TOP(1) WITH TIES 在 cte 中使行不同,然后在查询中排序

WITH Data AS(
SELECT TOP(1) WITH TIES
g.id, g.foo, g.bar, p.createdDate
FROM Parent p
JOIN Child c on c.parentId = p.id
JOIN Grandchild g on g.childId = c.id
ORDER BY ROW_NUMBER() OVER(PARTITION BY g.id, g.foo, g.bar ORDER BY p.createdDate)
)
SELECT *
FROM Data
ORDER BY createdDate

TOP(1) WITH TIES 选择 ROW_NUMBER().. = 1 的行。由于 PARTITION BY ... 它选择每个分区(组)一行。它的工作方式类似于 GROUP BY 但允许返回所有列

关于SQL:选择按相关子项的属性排序的不同子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44927328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com