1

「Id」、「ParentId」、および「CreatedDate」を持つテーブルが 1 つあります。行が元の送信の場合、「ParentId」はありません。元の送信に編集が加えられると、NewRow."ParentId" = Original."Id" の新しい行が作成されます。それ以降の新しい編集はすべて、適切な「ParentId」を取得します。これにより、編集履歴を確認できます。

次にクエリです。最新のユニークなエントリをすべて取得するクエリをまとめました。例えば。3 つの固有の元のフォームがある場合。私は彼らの最新のリビジョン (最新の子) を見たいだけです。

これは私が使用しているクエリです:

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 に答える