1

我有一张表,其中包含“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" 

这个查询对我来说有点草率,我想寻找一个更好的解决方案。让我知道是否需要任何进一步的信息。我感谢任何建议。

4

1 回答 1

2

您可以使用 Row_Number() 函数简化查询。

下面是一个例子和一个工作演示

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
于 2013-07-01T15:34:00.323 回答