Sql 同一个键有两个不同的值

Sql 同一个键有两个不同的值,sql,hiveql,Sql,Hiveql,我的桌子: booking_id arrivel_time departure_time date 我有过这样的案例:对于同一个键(预订id),我有两条记录——第一条记录的到达时间和出发时间为空,第二条记录的到达时间和出发时间为空,或者只有到达时间为空 我只想选择booking_id包含值的记录(如果发生) 我正在努力选择,你能解释一下如何做到这一点吗 您可以看到我想要的结果的示例一个方法使用了行数() 在旧版本的配置单元中,您可以使用: select t.* from (select t.*

我的桌子:

booking_id
arrivel_time
departure_time
date
我有过这样的案例:对于同一个键(预订id),我有两条记录——第一条记录的到达时间和出发时间为空,第二条记录的到达时间和出发时间为空,或者只有到达时间为空

我只想选择booking_id包含值的记录(如果发生)

我正在努力选择,你能解释一下如何做到这一点吗


您可以看到我想要的结果的示例

一个方法使用了
行数()

在旧版本的配置单元中,您可以使用:

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;
您可以使用
MAX()
DISTINCT
函数来获得所需的结果:

SELECT DISTINCT
booking_id
MAX(arrivel_time),
MAX(departure_time),
date
FROM MyTable
GROUP BY booking_id, date
但是,在这种情况下,
MAX()
函数的作用是获取更新预订的最新日期,因此,例如,如果您有一条记录的到达时间为
04/05/2021 08:00
,而另一条记录的到达时间为
04/05/2021 09:00
,则该记录的预订id相同;然后它将忽略第一个,而采用第二个

我上面给出的查询仅在其中一个预订ID为null值或两者都为null时有效


然后使用
DISTINCT
函数将具有完全相同值的两行合并为一行。

请提供示例数据和所需结果。是否有可能在输出中有一行包含空值?@Karlheim是。请查看所问的示例谢谢!如果只有一个键的空值,是否会选择此记录?嘿,我在运行时遇到一个错误,在选择目标的“到达时间”附近的“空”处显示(编译语句时出错:失败:ParseException行3:78缺失)it@Matias021 . . .
nulls last
是最近添加到配置单元中的一个组件。我为早期版本添加了一个替代方案。
SELECT DISTINCT
booking_id
MAX(arrivel_time),
MAX(departure_time),
date
FROM MyTable
GROUP BY booking_id, date