SQL/Hive选择具有特定列值的第一行

SQL/Hive选择具有特定列值的第一行,hive,hiveql,Hive,Hiveql,考虑以下3列表格结构: id, b_time, b_type id是一个字符串,表中将有多行具有相同的id。 b_time是时间戳,b_type可以有两个可能的值中的任意一个-'A'或'b' 我想选择满足以下两个条件之一的所有行(按优先级): 对于所有ID,选择时间戳最高的行,其中b_type='A' 如果对于id,没有b_type='A'所在的行,则选择时间戳最高的行,而不考虑b_type值 请推荐解决此问题的sql查询(即使它需要创建临时中间表)。找到了一种简单直观的方法: SELECT

考虑以下3列表格结构:

id, b_time, b_type
id
是一个字符串,表中将有多行具有相同的id。
b_time
是时间戳,
b_type
可以有两个可能的值中的任意一个-'A'或'b'

我想选择满足以下两个条件之一的所有行(按优先级):

  • 对于所有ID,选择时间戳最高的行,其中b_type='A'

  • 如果对于id,没有b_type='A'所在的行,则选择时间戳最高的行,而不考虑b_type值


  • 请推荐解决此问题的sql查询(即使它需要创建临时中间表)。

    找到了一种简单直观的方法:

    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
    

    找到了一种简单直观的方法:

    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