【问题标题】:Select first row from a list that have multiple row for each identifier从每个标识符有多行的列表中选择第一行
【发布时间】:2021-09-08 03:20:21
【问题描述】:

我有以下数据:

Column_A Column_B
123456 678
123456 999

我想达到以下结果:

Column_A Column_B
123456 999

这是我的代码:

SELECT COLUMN_A, MAX(COLUMN_B) FROM TABLE;

有没有其他方法可以使用 ma​​x(Column_B) 函数来实现结果?我无法使用 ma​​x() 函数,因为它在我正在使用的数据库中被禁用。提前谢谢!

【问题讨论】:

  • 如何禁用max?这有可能吗?
  • 按 B 列、降序排序并返回最多 1 条记录? - 即WHERE row <= 1 ORDER BY column_b desc 或类似的东西?
  • 嗨,鼓,我收到此消息“UDAF 'max' 尚不支持位置”,不知道为什么。嗨 blurfus,感谢您的反馈,工作解决方案请参阅答案部分。非常感谢大家的回复。

标签: sql hadoop hiveql


【解决方案1】:

除了子查询之外,还可以同时使用ROW_NUMBER()ORDER BYGROUP BY 语句,如下所示:

SELECT column_a, column_b
FROM(
 SELECT column_a, column_b, row_number() over (partition by column_a order by column_b desc) as rownum
 FROM table
)
WHERE rownum=1;

【讨论】:

  • 非常感谢!提供的解决方案在我使用的环境中不起作用,因此我将您的 SQL 拆分为 2 部分并且它可以工作!
猜你喜欢
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多