Goa*_*ine 0 sql-server-2008 sql-server order-by t-sql distinct
我有一个查询,我想在其中检索不同的Child
行,但按Parent
. 如果我执行以下操作,则会收到错误消息,因为 中指定的列ORDER BY
未包含在DISTINCT
列表中:
SELECT
DISTINCT c.foo, c.bar
FROM Parent p
JOIN Child c on c.parentId = p.id
ORDER BY p.createdDate
Run Code Online (Sandbox Code Playgroud)
但是,如果我添加p.createdDate
到选择列表中,我将失去Child
行的独特性,因为p.createdDate
它们都不同。
如果我使用 CTE 或子查询首先进行排序,然后从中选择不同的行,则外部查询不保证它将保持内部/cte 查询的顺序。
有没有办法实现这一目标?
您需要GROUP BY
而不是DISTINCT
(效果相同)并且您需要聚合要用于排序顺序的列。在这种情况下,我使用了MIN
,但您可以使用此处有意义的任何内容。
SELECT c.foo, c.bar
FROM Parent p
JOIN Child c on c.parentId = p.id
GROUP BY c.foo, c.bar
ORDER BY MIN(p.createdDate);
Run Code Online (Sandbox Code Playgroud)
请注意,由于您按父表的列进行Parent.createdDate
排序,因此子表中的多行可能具有相同的 值,因此同一行中的排序顺序createdDate
将是不可预测的。您需要从子表中添加至少一列以使排序顺序可预测。