如何使用sql中的rank()函数消除额外的重复记录?

问题描述 投票:0回答:1

我有以下2条记录:

开始_dt 结束_dt id 状态
12 2020-8-12 2300-01-01 1 活跃
12 1998-9-23 2014-9-23 2 活跃

这是我目前拥有的

row_number()
功能:

row_number() over (partition by id order by status, end_dt desc) rnk

我想知道我需要在上面的

row_number()
函数中添加什么,以便只显示最上面的记录:

开始_dt 结束_dt id 状态
12 2020-8-12 2300-01-01 1 活跃
sql google-bigquery
1个回答
0
投票

以下是我为 SQL Server 执行此操作的方法。对于 BigQuery,您的语法会略有不同,但我确信结构会相同。

create table #a (
    [key] int
  , start_dt date
  , end_dt date
  , id int
  , status varchar(20)
)
insert into a
values 
  (12, {d '2020-08-12'}, {d '2300-01-01'}, 1, 'active')
, (12, {d '1998-09-23'}, {d '2014-09-23'}, 2, 'active')
;
with
b as (
  select 
    [key]
  , start_dt
  , end_dt
  , id
  , status
  , max(end_dt) over (partition by [key]) as maxenddt
  from #a
)
select
  [key]
, start_dt
, end_dt
, id
, status
from b
where end_dt = maxenddt
© www.soinside.com 2019 - 2024. All rights reserved.