假设一个名为tau的表。
select distinct B From tau Where C = 12351 Order By B Desc Limit 2
A列是主键。它将是独一无二的。 B列是外键。在我的数据库中,没有整数键在表之间是相同的。 C列不是关键。
这个表会有很多行。还有许多其他列,例如列C,它们是为搜索索引的。
我想从B列得到M个不同的值。让我们说M = 2
通常,我会去
B
-----
10
5
我得到了
A | B
------
9 - 10
7 - 5
6 - 5
这是现在的现状。但我想升级到一个新场景:
当C列中的值将记录添加到结果堆(其中C = 12351)时,我想要返回列A以及列B ,同时保持最多不同列B值的限制2 。
看哪,我想要的结果。
babel
问题是,返回的记录的实际限制可能大于M,或者示例中为2。我真的不关心有多少记录通过,只要只有M个不同的B值。如何在Postgresql中编写查询来完成此操作?
答案 0 :(得分:2)
你可以通过这样的方式接近你想要的东西:
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列,但看起来似乎是你想要的。