在postgres中排除结果集中的行

时间:2013-08-26 10:22:34

标签: postgresql join left-join

这是我的结果集

resultset

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

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

例如,2667105必须不在结果集中返回period,然后myid = 612084598。

根据我这可以使用CASE实现,但我不知道如何使用它,我的意思是我不知道我应该使用CASE语句中的SELECT语句或{{ 1}}子句......


编辑:

这就是假设工作的方式,

WHERE = 612084598是myid = 2667105的默认行,但如果特别想要refid = refid = 6那么它必须返回除{{1}之外的所有行}} = 612084598

但如果我正在寻找period = 12,那么这个myid数据库中没有特定的period ..所以为此,它必须返回除第一个之外的所有行。 period的所有行,默认为一行..

1 个答案:

答案 0 :(得分:2)

问题的定义不是很清楚,但试试这个:

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

sql fiddle demo

相关问题