如何验证按Customer_ID分组后最大Acct_No对应Token最大值是否小于其他Acct_No的Token最大值
实现方案
我们可以分三步实现需求查询:
- 按
Customer_ID和Acct_No分组,计算每个客户下每个账户对应的最大Token值 - 提取每个客户的最大
Acct_No,以及该最大账户对应的最大Token值 - 比对客户下其他所有账户的最大
Token,只要存在任意其他账户的最大Token大于最大账户的最大Token,就返回对应符合条件的原始记录
样例数据表
Token | Acct_No | Customer_ID |:----|:-------:|----------: 10 | 1 | ABC 7 | 2 | ABC 6 | 3 | ABC 12 | 4 | ABC 11 | 1 | ABC 8 | 1 | ABC 15 | 4 | ABC 16 | 3 | ABC 10 | 2 | CDA
通用标准SQL查询代码
WITH acct_max_token AS ( -- 计算每个客户每个账户的最大Token SELECT Customer_ID, Acct_No, MAX(Token) AS max_token_per_acct FROM your_table_name GROUP BY Customer_ID, Acct_No ), cust_max_acct_info AS ( -- 计算每个客户的最大账户号,以及该账户对应的最大Token SELECT a.Customer_ID, b.max_acct_no, MAX(CASE WHEN a.Acct_No = b.max_acct_no THEN a.max_token_per_acct END) AS max_acct_token FROM acct_max_token a INNER JOIN ( SELECT Customer_ID, MAX(Acct_No) AS max_acct_no FROM acct_max_token GROUP BY Customer_ID ) b ON a.Customer_ID = b.Customer_ID GROUP BY a.Customer_ID, b.max_acct_no ) -- 匹配符合条件的原始记录 SELECT t.* FROM your_table_name t INNER JOIN acct_max_token a ON t.Customer_ID = a.Customer_ID AND t.Acct_No = a.Acct_No INNER JOIN cust_max_acct_info c ON t.Customer_ID = c.Customer_ID WHERE t.Acct_No != c.max_acct_no AND a.max_token_per_acct > c.max_acct_token;
注意将代码中的
your_table_name替换为实际使用的表名即可。
结果验证
针对你提供的样例数据,执行上述查询后返回结果如下,和你给出的预期匹配:
Token | Acct_No | Customer_ID 16 | 3 | ABC
内容的提问来源于stack exchange,提问作者Pushkar Anand
相关产品推荐
相关产品推荐

