Hive查询:在group by期间基于另一列选择一个列

4

有类似的问题,但它们的解决方案并不能完全解决我的问题。考虑以下表格:

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;

这并没有解决重复类型的问题。 是否有一个查询可以实现这一点? 非常感谢。


我也有类似的问题,谢谢。 - Han_Chen
2个回答

1

使用row_number()代替group by

select t.*
from (select t.*,
             row_number() over (partition by id order by time) as seqnum
      from t
     ) t
where seqnum = 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接