2016-12-05 3 views
1

テーブルprial_tb、列t_number、およびrundateを持つテーブルTrial_tbがあります。 サンプル値:テーブルから一意のレコードを取得し、2つのキー列に基づいてすべての重複を避けます。

p_id|t_number|rundate 
===================== 
111|333 |1/7/2016|| 
111|333 |1/1/2016|| 
222|888 |1/8/2016|| 
222|444 |1/2/2016|| 
666|888 |1/6/2016|| 
555|777 |1/5/2016|| 

PIDとtナンバーは、キー列です。私は結果がpidとtnumberの組み合わせが複製されているレコードを持ってはならないようにフェッチ値を必要とします。たとえば、111 | 333の重複があり、したがって有効ではありません。クエリは、最初の2つのレコード以外をすべてフェッチする必要があります。

私は以下のスクリプトを書いたが、最後のレコードだけを取り出す。

select 
    p_id,t_number 
from 
    trialtb 
group by 
    p_id,t_number 
having 
    count(*) = 1 

またはあなたも実行日が必要です

select 
    p_id,t_number,max(rundate) 
from 
    trialtb 
group by 
    p_id,t_number 
having 
    count(*) = 1 

あなたが唯一最大または最小を使用して1つの結果でアイテムを探していると見て::(

select rundate,p_id,t_number from 
(
select rundate,p_id,t_number, 
count(p_id) over (partition by p_id) PCnt, 
count(t_number) over (partition by t_number) TCnt 
from trialtb 
)a 
where a.PCnt=1 and a.TCnt=1 

答えて

0

あなたが意味しますか?うまく動作するはずです

+1

はい、同様にrundateが必要です。 – BenThomas

+0

私はそれを答えに加えました – gordatron

+0

ありがとう。これは動作します – BenThomas

1

having句は、このジョブには理想的です。 atedレコード。

-- Finding unique combinations. 
SELECT 
    p_id, 
    t_number 
FROM 
    trialtb 
GROUP BY 
    p_id, 
    t_number 
HAVING 
    COUNT(*) = 1 
; 

このクエリは、1回だけp_idt_numberの組み合わせを返します。

rundateを含める場合は、MAX(rundate) AS rundateをselect句に追加できます。ユニークな出現だけを見ているので、最大値または最小値は常に同じになります。

関連する問題