2017-11-18 16 views
0

パターンに従ったID番号で一年ごとに固有のライセンスを取得しようとしています。私はランクとパーティションを使用しようとしましたが、いくつかのライセンスには前後の開始日と終了日が異なるため、最終出力を得るにはいくつかの問題があります。 enter image description hereSQLパーティションランク

+0

上記の例は1つのIDです。私には100万人以上がいるので、これは私にとっては難しいのです。ありがとう –

+2

'パターンに続くID番号によって.'どのパターン?もっと説明していただけますか?私はこの表のどのパターンも見ることができません。 – krokodilko

+0

私は次の年に頻繁に表示されるライセンスをしようとしています。 –

答えて

0

はなぜ千鳥開始/終了日は問題ではない:enter image description here

は、理想的には、私は最終的な出力になりたい:データは今のように見えますか?限り、あなたはレコードが属する年を判別できるように、あなたはこのような何かを行うことができます。

SELECT * 
FROM <Table_Name> 
QUALIFY RANK() OVER(PARTITION BY ID_Number, Year ORDER BY <Some_Expression>) = 1 

そして、これはどのあなたができるプロセスが、それぞれ(ID /年)の組み合わせごとにパーティション(グループ)を作成しますあなたは欲しい。 <Some_Expression>を使用して行を並べ替え、表示するデータの行が最上部にソートされるようにします。 RANK = 1は、グループごとにこの「トップ」行のみを返します。

あなたが探しているラインに沿っていますか?

+0

これは残念なことに最終的な出力を得られません。 –

0
select * 
from mytable 
qualify max(year) over (partiton by license)  -- example: 
     - min(year) over (partiton by license)  -- 2017 - 2015 = 2 
     = count(*) over (partiton by license) - 1 -- three rows -1 = 2 
    and count(*) over (partiton by license) > 1 

年が複数あり、それらの年が連続しています。

+0

hmmm ...うまくいかないようです。そのクエリから何の出力も得られませんでした。あなたはありがとうございます –

+0

もちろん、私の論理は間違っています、あなたは2015年から2017年の間に3年間を数えますが、2017-2015は2を返します。修正しました。 – dnoeth

+0

ありがとうございます。私は私のために論理を理解しなければなりません。しかし、私は2014年のレコードを取得していません.2014年の(ランダムまたは最初の)レコードを取得するためにこのロジックを編集する方法はありますか?私は3つしか価値がない(2015-2017)。 –