首页 > 解决方案 > 同一个键有 2 个不同的值

问题描述

我的桌子:

booking_id
arrivel_time
departure_time
date

我的情况是,对于同一个键(booking_id),我有 2 条记录 - 第一条在到达时间和出发时间上为空,第二条在到达时间和出发时间上的值(日期和时间)或仅在到达时间。

如果发生,我只想选择 booking_id 与值一起的记录。

我正在为如何选择它而苦苦挣扎,你能解释一下如何实现这一点吗?

你可以在这里看到我想要的结果的一个例子

标签: sqlhiveql

解决方案


一种方法使用row_number()

select t.*
from (select t.*,
             row_number() over (partition by booking_id order by arrival_time nulls last) as seqnum
      from t
     ) t
where seqnum = 1;

在旧版本的 Hive 中,您可以使用:

select t.*
from (select t.*,
             row_number() over (partition by booking_id 
                                order by (case when arrival_time is not null then 1 else 2 end)
                               ) as seqnum
      from t
     ) t
where seqnum = 1;

推荐阅读