【问题标题】:How to find first IN and last OUT for a particular column?如何找到特定列的第一个 IN 和最后一个 OUT?
【发布时间】:2014-08-26 07:14:47
【问题描述】:

我有一个包含列事件的表。它有 IN 和 OUT 之类的数据。

现在我需要创建两列,其中包含特定 ID 的第一个 IN 和同一 ID 的最后一个 OUT 的时间。

我需要使用具有领先和滞后的窗口功能分区。

我该怎么做?

任何帮助都会很棒!

我必须在 HIVE 中这样做!

【问题讨论】:

    标签: hive partition-by


    【解决方案1】:

    我假设您也有一些日期列(我们称之为dt)。
    要获得所有 ID 的先入后出,您需要执行以下操作:

    select 
      id,
      min(case when event='IN' then dt end) first_in, 
      max(case when event='OUT' then dt end) last_out
    from table
    group by id
    

    【讨论】:

    • 嗨.. 非常感谢您的输入.. 如果我使用此查询将有空值.. 因为并非所有 id 都会有 IN & OUT 值.. 你能告诉我我是如何可以删除那些空值吗?
    • 您可以使用coalesce,在其中放置除 null 以外的其他内容:coalesce(max(case...),'SOMETHING') 或删除 having 中的这些行:having max(case..) is not null
    • 由于某种原因,这不起作用......我会给你这个场景..我需要找到特定 ID 的第一个 IN 和同一会话的相同 ID 的最后一个 OUT不是一天中的最后一个 .. 这有意义吗?
    猜你喜欢
    • 1970-01-01
    • 2016-03-05
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2019-08-12
    • 2021-11-07
    相关资源
    最近更新 更多