2017-11-28 3 views
0

から列の最大値を取得します。私は、次のようつの列がnullでない場合、私は、次のスキーマ<a href="https://i.stack.imgur.com/zStjd.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/zStjd.png" alt="Schema"></a></p> <p>を持つテーブルに取り組んでいます同じテーブル

  1. でデータを取得したいですParentがnullの場合、その行全体をそのまま返します
  2. Parentがnullでない場合は、最大バージョンを取得し、その行の親IDと同じIDを持つ行は取得しません。クエリを実行する

私は1が6と5の親であると6以来最大のバージョンを持っているので、私は同上6ではなく、IDが1になるだろう、次のIDが 2、3、4、6 を取得する必要があります行6が選択されます。

+1

私はその小さな画像、テキストを読むことがあまりにも古いです。 (ここではほとんどの人が画像ではなく書式付きのテキストを必要としています) – jarlh

+0

1行目と6行目の関係を比較してみましょう。 –

+1

あなたの画像は単一の親を持つシナリオだけですか?ファイルに親があり、それには親がありますか? – Larnu

答えて

0

画像は使用できないため、独自のサンプルデータを作成しました。あなた自身のデータのためにこれを調整する必要があります。しかし、これは、あなたが後にしている何を取得する必要があります:

WITH CTE AS (
    SELECT * 
    FROM (VALUES (1,'John.jpg',0,NULL), 
       (2,'Jane.jpg',0,NULL), 
       (3,'George.jpg',0,NULL), 
       (4,'Susan.jpg',0,NULL), 
       (5,'John2.jpg',0,1), 
       (6,'Susan2.jpg',0,4), 
       (7,'John3.jpg',1,1)) AS V (ID, [Filename], [Version], Parent)), 
RNs AS(
    SELECT COALESCE(C2.ID,C1.ID) AS ID, 
      COALESCE(C2.[Filename],C1.[Filename]) As [Filename], 
      COALESCE(C2.[Version],C1.[Version]) AS [Version], 
      COALESCE(C2.Parent,C1.Parent) AS [Parent], 
      ROW_NUMBER() OVER (PARTITION BY C1.ID ORDER BY C2.[Version] DESC) AS RN 
    FROM CTE C1 
     LEFT JOIN CTE C2 ON C1.ID = C2.Parent 
    WHERE C1.Parent IS NULL) 
SELECT ID, [Filename], [Version] 
FROM RNs 
WHERE RN = 1; 
+0

パーフェクト..完璧で素晴らしい。私は一日、このクエリを設計しました。どうもありがとう。あなたは最高です。 <3 –

0
Create table #tmp (id int, [version] int, parent int) 

    insert into #tmp values(1,0,null) 
    insert into #tmp values(2,0,null) 
    insert into #tmp values(3,0,null) 
    insert into #tmp values(4,0,null) 
    insert into #tmp values(5,0,1) 
    insert into #tmp values(6,1,1) 
    --insert into #tmp values(7,2,1) 
    --insert into #tmp values(8,2,2) 
    --insert into #tmp values(9,3,2) 

    --SElect * from #tmp 

    SELECT id, version, parent 
    FROM(
     SELECT *, ROW_NUMBER()OVER(PARTITION BY parent ORDER BY version DESC) rn 
     FROM #tmp 
    )X 
    WHERE ((rn = 1 and parent is not null) or (parent is null)) 
    AND id not in (SELECT DISTINCT Parent From #tmp where Parent is not null) 


    DRop table #tmp 
+0

これも問題なく動作しています。ありがとうございました@Sahi。 –

関連する問題

 関連する問題