【问题标题】:excluding rows from resultset in postgres从 postgres 的结果集中排除行
【发布时间】:2013-08-26 10:22:33
【问题描述】:

这是我的结果集

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

如果在结果集中,我得到了特定的refidperiod,那么不能返回具有相同refid 的其他行。

例如,2667105 具有 period 然后 myid = 612084598 不得在结果集中返回。

据我所知,这可以使用 CASE 来实现,但我不知道如何使用它,我的意思是我不知道应该在 SELECT 语句或 WHERE 子句中使用 CASE 语句。 .


编辑:

这就是它的工作方式,

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

但是如果我正在寻找period = 12,对于这个period 没有特定的refid 存在于数据库中.. 因此它必须返回除第一个之外的所有行.. 表示所有带有@987654340 的行@ 这是默认的..

【问题讨论】:

    标签: postgresql join left-join


    【解决方案1】:

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

    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

    【讨论】:

    • @KuKu 还是不太清楚,请为您的测试用例提供默认输入
    猜你喜欢
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2021-06-19
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    相关资源
    最近更新 更多