PostgreSQL-多重选择条件

请点击

我有以下结构的表:

|id|author_id|name|type|created_at|updated_at

作为一种类型,我可以有5种不同的类型(A,B,C,D,E)。

我需要一个author_id查询数据库,在其中我只能选择最后更新的行“类型” A和B。并选择所有其他类型的行。

所以结果应该是这样的:

| id  | author_id | name  | type | created_at | updated_at
| 12  | 88        | lorem | A
| 45  | 88        | lorem | B
| 44  | 88        | lorem | C
| 154 | 88        | lorem | C
| 98  | 88        | lorem | C
| 856 | 88        | lorem | E
| 857 | 88        | lorem | E

单一查询可以吗?还是我需要使用两个查询?

谢谢

蒂姆·比格莱森(Tim Biegeleisen)

您可以尝试以下方法:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY "type" ORDER BY updated_at DESC) rn
    FROM yourTable
)

SELECT id, author_id, name, "type", created_at, updated_at
FROM cte
WHERE
    ("type" IN ('A', 'B') AND rn = 1) OR
    "type" NOT IN ('A', 'B');

该方法用于ROW_NUMBER查找所有类型的最新行。在CTE上的查询中,我们仅为类型AB选择最新更新的行,但为所有其他类型选择所有行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章