SQL / Hive 选择具有特定列值的第一行
Posted
技术标签:
【中文标题】SQL / Hive 选择具有特定列值的第一行【英文标题】:SQL / Hive Select first rows with certain column value 【发布时间】:2016-04-18 14:21:12 【问题描述】:考虑以下三列表结构:
id, b_time, b_type
id
是一个字符串,表中会有多行具有相同的id。
b_time
是时间戳,b_type
可以有 2 个可能值中的任何一个 - 'A' 或 'B'。
我想选择满足两个条件之一的所有行,优先考虑:
对于所有 id,选择时间戳最高的行,其中 b_type='A'。
如果对于一个 id,没有 b_type='A' 的行,则选择时间戳最高的行,而不考虑 b_type 值。
请建议应该解决这个问题的 sql 查询(即使它需要创建临时中间表)。
【问题讨论】:
【参考方案1】:想出了一个简单直观的方法来做到这一点:
SELECT * FROM
(SELECT id
, b_time
, b_type
, ROW_NUMBER() OVER (PARTITION BY id ORDER BY b_type ASC,b_time DESC) AS RN
FROM your_table
)
WHERE RN = 1
【讨论】:
【参考方案2】:with nottypea as (select id, max(b_time) as mxtime
from tablename
group by id
having sum(case when b_type = 'A' then 1 else 0 end) = 0)
, typea as (select id, max(b_time) as mxtime
from tablename
group by id
having sum(case when b_type = 'A' then 1 else 0 end) >= 1)
select id,mxtime,'B' as typ from nottypea
union all
select id,mxtime,'A' as typ from typea
【讨论】:
以上是关于SQL / Hive 选择具有特定列值的第一行的主要内容,如果未能解决你的问题,请参考以下文章