2017-05-11 112 views
2

這裏也有類似的問題,但是它們的解決方案不能很好地解決我的問題。請看下面的表格:Hive查詢選擇一列,取決於組中的另一列

id type time 
1 a 1 
1 a 2 
1 b 3 
2 b 1 
2 b 2 

我要的是用最小的時間,並與時間相關的類型的ID,所以結果應該是:

id type time 
1 a 1 
2 b 1 

(如果是平局時間與不同類型,選擇任何類型是可以接受的) 我當前的查詢是這樣的:

SELECT id, type, min(time) FROM t GROUP BY id, type; 

這沒有解決重複類型的問題。 有沒有一個查詢我可以做到這一點? 非常感謝

+0

我也有類似的問題,謝謝 –

回答

1

相反的group by,使用row_number()

select t.* 
from (select t.*, 
      row_number() over (partition by id order by time) as seqnum 
     from t 
    ) t 
where seqnum = 1; 
-1

--Using子查詢還可以實現它。

CREATE TABLE #Temp (
    id INT 
    ,[type] CHAR(1) 
    ,[time] INT 
    ) 

INSERT INTO #Temp VALUES 
(1,'a',1), 
(1,'a',2), 
(1,'b',3), 
(2,'b',1), 
(2,'b',2) 

SELECT DISTINCT T.id 
    ,T.type 
    ,DT.MinTime 
FROM #Temp T 
INNER JOIN (
    SELECT MIN(TIME) AS MinTime 
    FROM #Temp 
    GROUP BY [TYPE] 
    ) AS DT ON T.[time] = DT.MinTime 
相關問題