2016-07-23 12 views
1

私はこの挑戦を今日早くやり遂げました。 date_addedを使用して、各レコードの最新バージョンを保持しますが 最古this_flag値を保持:SQL-シンプルだがトリッキーなクエリチャレンジ

はにSQLクエリを記述します。 のみ[Name][DOB][ID]は、これは私が、私はロジックが正しくないことを知っている

SELECT * FROM Table_C where ID < 3; 

をやったことある記録

CREATE TABLE [Table C](
    [Date_added] [varchar](50) NULL, 
    [this_flag] [varchar](1) NULL, 
    [Name] [varchar](50) NULL, 
    [DOB] [int] NULL, 
    [ID] [int] NULL) ; 

Date_added this_flag  Name    DOB   ID 
20150501 Y    Jingleheimerscmidt 19901002 3 
20150501 N    Jingleheimerscmidt 19901002 3 
20150505 Y    Jon     19901001 1 
20150501 N    Jon     19901002 1 
20150501 Y    Jacob    19901001 2 
20150505 N    Jingleheimerscmidt 19901001 3 
20150501 Y    Jingleheimerscmidt 19901001 3 

の一意性を決定するために使用されています。しかし、他のすべての構文はただ
それをカットしていません。 誰もこれに対して正しいSQLクエリを書く方法を知っていますか?このうち(あなたは、SQL Serverのバージョン2012以降を持っていると想定)

Ttは日付の降順に基づいてランク付けする「this_flag」欄とランク機能のための最も古いレコードを取得するために解析関数First_Valを使用しています

+1

出力は何ですか?質問は不明です – mohan111

+0

出力は、(1)date_addedを使用して各レコードの最新バージョンを表示し、(2)一番古いthis_flag値を保持するSQLクエリです。[Name]、[DOB]、[ID]レコードレコード – Koda

+1

あなたは出力を投稿してくださいできますか?あなたが意味するものは、最も古いフラグである – mohan111

答えて

1

チェック最新の日付は、常に=ランクで来る1

SELECT * from 
(
    Select * , FIRST_VALUE(this_flag) OVER (PArtition By Name, ID Order by Date_Added) FirstVal_this_flag 
    , RANK() OVER (PArtition By Name, ID Order by Date_Added desc) as Rnk 
    from Table_C C 
) a 
Where Rnk = 1 

編集するように追加:あなたのサンプルの最初の2行は同じDATE_ADDED値とそののPKのを持っても同じです。おそらく、これはあなたの質問のタイプミスですが、いずれにせよ、この質問もその状況を処理します。 Date_Addedでソートした後、SQLエンジンから返された1番目のthis_flagを取得するだけです。

SELECT Distinct Date_Added , Name, DoB, ID, FirstVal_this_flag from 
(
    Select * , FIRST_VALUE(this_flag) OVER (PArtition By Name, DoB, ID Order by Date_Added) FirstVal_this_flag 
    , RANK() OVER (PArtition By Name, DoB, ID Order by Date_Added desc) as Rnk 
    from Table_C C 
) a 
Where Rnk = 1 
+0

ありがとうございました@objectNotFound。今回は「オブジェクトが見つかりました」 - この構文が機能します。私はこのロジックに取り組み、それを機能させようと努力しました。しかし、それは扱いにくかった。私はSELECT文を実行し、必要な出力を生成しました。しかし、論理はまだ私を逃した。 rnk列を追加すると非常に便利です。私はセルフ・ジョインに向かって傾いていた。あなたの洞察に感謝します。 – Koda

+0

@Kodaあなたは大歓迎です。難しい質問をするためにプラス1。私はこれに取り組んでいました。 – objectNotFound

関連する問題