我有以下结构的表:
|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
单一查询可以吗?还是我需要使用两个查询?
谢谢
您可以尝试以下方法:
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上的查询中,我们仅为类型A
和B
选择最新更新的行,但为所有其他类型选择所有行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句