有没有办法显示每个唯一标识的前两个结果?

Is there a way to display the first two results of each unique id?

我从事医疗保健工作。在 Postgres 数据库中,我们有 table 个成员 ID 和日期。我正在尝试为每个会员 ID 提取最新的两个日期。

简化样本数据:

A 1
B 1
B 2
C 1
C 5
C 7
D 1
D 2
D 3
D 4

想要的结果:

A 1
B 1
B 2
C 1
C 5
D 1
D 2
  • 我强烈认为这是一项家庭作业,建议您在查看我的解决方案之前先自行研究分区,特别是 rank() 函数。
  • 此外,您还没有具体说明您是如何收到您提供的初始结果的,所以我不得不假设您只是 select letter_column, number_column from my_table; 获得了结果。

因此,您真正想要的是将初始查询结果按 letter_column 和 select 每组中的前两行进行分组。 rank() 函数允许您为每一行分配一个数字,在组内计数:

select letter_column,
   number_column,
   rank() over (partition by letter_column order by number_column) as rank
from my_table;

因为它是一个函数,你不能在同一个查询的谓词中使用它,所以你必须围绕这个构建另一个查询,这次过滤 rank 结束的结果2:

with ranked_results as (select letter_column,
                           number_column,
                           rank() over (partition by letter_column order by number_column asc) as rank
                    from my_table mt)
select letter_column,
       number_column
from ranked_results
where rank < 3;

这里有一个 SQLFiddle 可供使用:http://sqlfiddle.com/#!15/e90744/1/0

希望对您有所帮助!