假设一个名为tau的表。

tau:
A | B | C
----------
2 - 1 - 12351
3 - 1 - 65462
4 - 1 - 13461
6 - 5 - 12351
7 - 5 - 12351
8 - 5 - 62372
9 - 10 -12351

A列是主键。它将是独一无二的。B列是外键。在我的数据库中,没有一个整数键在表中是相同的。C列不是键。
这张桌子会有很多行。还有许多其他的列,比如说C列,都被编入了搜索索引。
我想要从B列中得到M个完全不同的值
通常,我会去
select distinct B From tau Where C = 12351 Order By B Desc Limit 2

我得到了
B
-----
10
5

这是现在的情况。但我想升级到一个新的场景:
当C列中的值将记录添加到结果堆(其中C=12351)时,我希望返回a列和B列,同时保持最多2个不同B列值的限制。
看,我想要的结果。
A | B
------
9 - 10
7 - 5
6 - 5

问题是,返回的记录的实际限制可以大于M,或者在示例中大于2。我真的不在乎有多少条记录通过,只要B只有M个不同的值。我该如何在Postgresql中编写查询来实现这一点?

最佳答案

你可以通过这样做接近你想要的:

select A, B
from tau t
where (B, C) in (select distinct B, C
                 From tau
                 Where C = 12351
                 Order By B Desc
                 Limit 2
                );

这总是返回A列,但在其他方面似乎是您想要的。

09-27 06:53