SQL - select 子句中的 Subselect - 如何创建决定唯一性逻辑的列

SQL - Subselect in select clause - how to create column which decides uniqity logic

我正在尝试编写 subselect,它将 运行 通过返回的数据,然后检查所有状态,然后决定唯一性逻辑。

有什么办法可以查到关注的吗?

我试着这样写,但我需要在一个 case 语句中包含它

SELECT a.id, a.status,
,(SELECT 
    CASE WHEN b.STATUS = 'Active' THEN 1 ELSE 0 END
    CASE WHEN b.STATUS = 'Expired' THEN 1 ELSE 0 END 
    FROM b.TABLE
    WHERE a.id=b.id )AS unique
FROM my.TABLE 

结果应该类似于https://i.stack.imgur.com/qCA74.png过期案例的图片

提前感谢您的任何提示。

使用window函数:

select t.*,
       (case when row_number() over (partition by id
                                     order by case status when 'Active' then 1 when 'Expired' then 2 else 3 end
                                    ) = 1
             then 1 else 0
        end) as unique_flag
from my.table t;

如果查找 table 与源 table 相同,那么您可以使用带有常量的 LAG 函数并使用其默认值将第一行标记为 1 和其他为 0。但是您需要按某些字段对行进行排序,以处理状态重复项。

select a.id, a.status,
  lag(0, 1, 1) over(
    partition by a.id
    order by 
      case a.status
        when 'Active' then 0
        when 'Expired' then 1
        else 3
      end asc,
      a.some_more_columns asc /*To find that first row when there are duplicates by status*/
  ) as unique_flag
from MY_TABLE a

关于对象命名:永远不要使用关键字作为标识符。调用日期为 date、table 的列,用户为 users,一些未知的 table 为 table 会使您的设计容易出错。