尝试根据两个单独列中的排名值创建一个标志

Trying to create a flag based on ranking values in two separate columns

我有一个查询,其中某些 ID 有重复的行,但有两个不同的列由 window 函数创建,需要根据特定顺序为每一行创建一个标志。我在下面提供了数据的示例。

我有一个 RANK_ONE 列,其中 return 是一个排名值或空值,并不是每个 ID 都有一个值,但如果它有一个值,我需要它 return 1 表示包含 1 的行。

RANK_TWO 列基本相同,但如果尚未从 RANK_ONE 中为同一 ID 标记 1,我需要标记第 1 行。

PRIMARY 列是我想要的结果。有什么想法吗?

我不知道我是不是在查询中查询的时间太长,看不到眼前的简单解决方案,但它让我抓狂。

你似乎想要 rank_one 如果它是 id 的每 1 否则 rank_two:

select t.*,
       (case when max(case when rank_one = 1 then 1 else 0 end) over (partition by id) = 1 and rank_one = 1 then 1
             when max(case when rank_one = 1 then 1 else 0 end) over (partition by id) = 1 then 0
             when rank_two = 1 then 1
             else 0
        end) as primary
from t;