ため、重複する値を含む行を除外:(最初の行はヘッダである)ハイブSQL:私は、次のデータとのハイブテーブルを持っている特定の列
session,ts,status,color
a,1,new,red
a,2,check,blue
a,3,new,green
a,4,amount,blue
a,5,end,blue
b,1,new,red
b,2,bottle,blue
b,3,end,blue
c,4,check,blue
IトラブルそのSQLクエリを書き込むことを抱えています次の基準を満たしています。 1)ステータスがnewのセッションのすべての行。 2)セッションが新しいステータス=ためmultilpe値が含まれている場合、最初のものだけ
出力
a,1,new,red
a,2,check,blue
a,4,amount,blue
a,5,end,blue
b,1,new,red
b,2,bottle,blue
b,3,end,blue
行a,3,new,green
とc,4,check,blue
が省略されているであろう取り除きます。
session
、
ts
と
status
の列を見ている場合は確かにトリックを行うんが、それはそれ
にグループ・バイを持っているとして、私は2番目のクエリを好きではないこのクエリを書いている
select session, ts, status from mp_logon3
where status!='new'
and session in (select distinct a.session from mp_logon3 a
where a.status = 'new'
)
union
select session, min(ts), status from mp_logon3
where status='new'
and session in (select distinct b.session from mp_logon3 b
where b.status = 'new'
)
group by session, status
ただし、color
列を追加するとすぐに、それは分解されます。 (あなたは、セッション= Aとステータス=新しいのための両方の行を取得します。緑の一つと赤のための1つ。
select session, ts, status, flavor from mp_logon3
where status!='new'
and session in (select distinct a.session from mp_logon3 a
where a.status = 'new'
)
union
select session, min(ts), status, flavor from mp_logon3
where status='new'
and session in (select distinct b.session from mp_logon3 b
where b.status = 'new'
)
group by session, status, flavor
最後に、全体としてこのクエリを記述するより良い方法がある。たぶん1組合なし? TeradataのSQL使用
ためHiveQLソリューションであるオラクル、SQLのSerバージョン、MySQLなど) –
おっと、ご意見ありがとうございます。これはハイブSQLです。私は今それを追加しました。 –