Hive查询在分组依据期间根据另一列选择一列

时间:2017-05-11 02:45:49

标签: sql hadoop group-by hive aggregate

有类似的问题,但他们的解决方案无法解决我的问题。请考虑下表:

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;

无法解决重复类型问题。 我可以做一个查询来实现吗? 非常感谢

2 个答案:

答案 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 :(得分:-1)

- 使用子查询我们也可以实现它。

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