SQL - 将行标记为每组的 0 值

标签 sql teradata

我正在计算运行余额,并希望将所有行标记为 0 值,以具有与帐户 ID 相关的“匹配”标记,否则“不匹配”标记。

enter image description here

这是我尝试过但没有得到正确结果的方法:

SEL a.*, 
CASE WHEN RUNNING_BALANCE OVER (PARTITION BY ACCT_SROGT_ID ROWS UNBOUNDED PRECEDING ) = 0 THEN 'M' ELSE 'NM' END R 
FROM NON_MATCHING_RUNNING_BALANCE  a

最佳答案

我们可以使用子查询找到最后一个为0的acct_rank,然后使用case来测试每一行。

Select
  a.*,
  Case when a.acct_rank > z.last_zero
    Then 'unmatched' else 'matched' 
    End as is_matched
From accounts a
Join ( select 
         account_id as id,
         MAX(acct_rank) last_zero
       From accounts
       Where running_balance = 0
       Group by account_id) z
On a.account_id = z.id;

关于SQL - 将行标记为每组的 0 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71936086/

相关文章:

php - 从最后输入的十个值中选择最受欢迎的条目

sql - 尝试在 SQL Server 中创建计算列

sql - 将数字转换为 varchar 0 数字后消失

teradata - 修剪 Snowflake 中的列数据

mysql减少了选择查询所花费的时间

sql - 主键数据类型会影响性能吗? SQL Server 2008

sql - 如何使用 R 向 SQL Server 表插入数据?

sql - 插入多行 SQL Teradata

sql - 找不到列 foo 表名 - Teradata

sql - Teradata SQL - 非常大的拉动