2017-07-06 7 views
0

を含む少なくとも1つの行とのグループから選択したデータは、私はそうのようなハイブのテーブルがあるとします。Data2の「スタッフ」を含む各グループのためにハイブ -

|Id|Data |Data2 |Groupkey| 
|1 |One |  |Group1 | 
|2 |Two |Stuff |Group1 | 
|3 |Shoes|Some |Group2 | 
|4 |four |Stuff |Group2 | 
|5 |Three|Notme |Group3 | 

を私が持っている行を取得したいですGroupkeyおよびDataは、Stuff以外の行にあり、Data2の 'Stuff'行にあります。

だから、結果のデータセットは

|Group |Data |Data2| 
|Group1|One |Two | 
|Group2|Shoes|four | 

私はGROUP BY一緒に行く何かを得るために期待していたようになり、私は

SELECT Data, Groupkey FROM (SELECT Data, GroupKey FROM MyTable GROUP BY Groupkey) WHERE Data2 <> 'Stuff'に行き始めたが、これは私がでのデータを含める必要が示唆失敗します私はグループ化したいものではありませんか?

そして、特定のデータを持つ1つの行を含むグループを選択する方法がわかりません。

答えて

0
select  Groupkey           as `Group` 
      ,min (case when Data2 <> 'Stuff' then Data end)  as Data 
      ,min (case when Data2 = 'Stuff' then Data end)  as Data2 

from  MyTable 

group by Groupkey 

having  count (case when Data2 = 'Stuff' then 1 end) > 0 
; 

+--------+-------+-------+ 
| group | data | data2 | 
+--------+-------+-------+ 
| Group1 | One | Two | 
| Group2 | Shoes | four | 
+--------+-------+-------+ 
0
SELECT DISTINCT Groupkey, t1.Data, t2.Data as Data2 
FROM t t1 
INNER JOIN t t2 
ON t1.Groupkey = t2.Groupkey 
AND t1.Data2 <> t2.Data2 
WHERE t2.Data2 = 'Stuff'