Postgresql 从postgres中的结果集中排除行

Postgresql 从postgres中的结果集中排除行,postgresql,join,left-join,Postgresql,Join,Left Join,这是我的结果集 我在refid的基础上使用WHERE refid IN返回此结果集。 在这里,我需要应用一个没有任何编程的逻辑(仅指SQL查询) 如果在结果集中,我得到特定refid的period,则不能返回具有相同refid的其他行 例如,如果2667105的期间然后myid=612084598,则不能在结果集中返回 我认为这可以通过使用CASE实现,但我不知道如何使用它,我的意思是我不知道应该在SELECT语句或WHERE子句中使用CASE语句 编辑: 这就是它的工作原理 myid=61

这是我的结果集

我在
refid
的基础上使用
WHERE refid IN
返回此结果集。 在这里,我需要应用一个没有任何编程的逻辑(仅指SQL查询)

如果在结果集中,我得到特定
refid
period
,则不能返回具有相同
refid
的其他行

例如,如果2667105的
期间
然后
myid
=612084598,则不能在结果集中返回

我认为这可以通过使用CASE实现,但我不知道如何使用它,我的意思是我不知道应该在
SELECT
语句或
WHERE
子句中使用
CASE
语句


编辑:

这就是它的工作原理

myid
=612084598是
refid
=2667105的默认行,但如果特别希望
refid
用于
period
=6,则它必须返回除
myid
=612084598之外的所有行


但如果我要查找
期间
=12,则对于此
期间
数据库中没有特定的
refid
。。因此,它必须返回除第一行以外的所有行。。表示所有带有
refid
的行,这是默认行。

问题定义不太清楚,但请尝试以下操作:

with cte as (
    select
        *,
        first_value(period) over(partition by refid order by myid) as fv
    from test
)
select
    myid, refid, period
from cte
where period is not null or fv is null

@KuKu仍然不太清楚,请为您的测试用例提供默认输入