【问题标题】:SQL+Fetch rows with latest date+Case when row_number()+DuplicatesSQL+获取具有最新日期的行+row_number()+重复时的情况
【发布时间】:2019-05-28 10:03:01
【问题描述】:

我有一个表格,其中包含以下示例数据的字段(id、日期、产品)

id  date    Product current_Flag    Expected_flag
14834   2019-01-03 00:00:00 A   1   1
14834   2019-01-31 00:00:00 B   0   0
14834   2019-02-28 00:00:00 C   0   0
14834   2019-03-30 00:00:00 C   0   0
14834   2019-01-03 00:00:00 D   0   1

我正在尝试case when row_number() over (partition by id order by date) = 1 then 1 else 0 end as flag, 但是对于具有最小日期的特定不同 ID,它的标志为 1,但我需要将特定 ID 和最小日期和产品标记为 1 标志,如 Expected_flag 所示

case when row_number() over (partition by id order by date) = 1 then 1 else 0 end as flag

【问题讨论】:

    标签: mysql sql impala


    【解决方案1】:

    你需要 dense_rank() 代替:

    case when dense_rank() over (partition by id order by date) = 1 then 1 else 0 end as Expected_flag
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      • 2018-02-09
      • 2023-03-10
      • 2018-11-01
      • 2017-10-06
      相关资源
      最近更新 更多