我有一个表有“Id”,“ParentId”和“CreatedDate”的表。如果该行是原始提交,则它将没有“ParentId”。当对原始提交进行编辑时,会在NewRow中创建一个新行。“ParentId”= Original。“Id”。从那里开始的每个新编辑都将采用适当的“ParentId”。这提供了一种查看编辑历史的方法。
现在进行查询。我一起搜索了一个将获得所有最新和唯一条目的查询。例如。如果我有3个独特的原始形式。我只想看到他们最近的版本(最近的孩子),除非他们没有,在这种情况下我想要原来的“ParentId”是空的。
这是我正在使用的查询:
SELECT DISTINCT A.*
FROM "dbo"."customercomplaint" AS A
RIGHT OUTER JOIN "dbo"."customercomplaint" AS B
ON B."parentid" != A."id"
WHERE A."parentid" IS NULL
AND A."id" IS NOT NULL
UNION
SELECT t1.*
FROM "dbo"."customercomplaint" t1
JOIN (SELECT "parentid" AS id,
Max("createddate") AS "CreatedDate"
FROM "dbo"."customercomplaint"
GROUP BY id) t2
ON t1."parentid" = t2.id
AND t1."createddate" = t2."createddate"
这个查询对我来说有点草率,我想找一个更好的解决方案。如果需要任何进一步的信息,请告诉我。我感谢任何建议。
答案 0 :(得分:2)
您可以使用Row_Number()函数简化查询。
以下是一个示例和working demo
select ID, ParentID, CreatedDate
from (
select ID, ParentID, CreatedDate, row_number() over(partition by isnull(ParentID, ID) order by CreatedDate desc) RowNumber
from CustomerComplaint
) t
where
t.RowNumber = 1