有一些像这样的问题没有答案,例如here.
我以为我会发布另一个希望获得一个。
我有一个带有重复行的hive表。请考虑以下示例:
*ID Date value1 value2*
1001 20160101 alpha beta
1001 20160201 delta gamma
1001 20160115 rho omega
1002 20160101 able charlie
1002 20160101 able charlie
完成后,我只想要两条记录。具体来说,这两个:
*ID Date value1 value2*
1001 20160201 delta gamma
1002 20160101 able charlie
为什么那两个?对于ID = 1001,我想要最新的日期和该行中的数据。对于ID = 1002,答案真的相同,但带有该ID的两个记录是完全重复的,我只想要一个。
那么,有关如何做到这一点的任何建议?使用ID和“最大”日期的简单“分组依据”将无效,因为忽略其他列。我不能把'max'放在那些,因为它将从所有记录中拉出最大列(将从旧记录中拉出'rho'),这是不好的。
我希望我的解释清楚,我很欣赏任何见解。
谢谢
答案 0 :(得分:2)
试试这个:
WITH temp_cte AS (
SELECT mt.ID AS ID
, mt.Date AS Date
, mt.value1 AS value1
, mt.value2 AS value2
, ROW_NUMBER() OVER (PARTITION BY mt.ID ORDER BY mt.Date DESC) AS row_num
FROM my_table mt
)
SELECT tc.ID AS ID
, tc.Date AS Date
, tc.value1 AS value1
, tc.value2 AS value2
FROM temp_cte tc
WHERE tc.row_num = 1
;
或者您可以执行MAX()并将表连接到自身,其中ID = ID且max_date = Date。 HTH。