【问题标题】:SQL Select from a single compound tableSQL 从单个复合表中选择
【发布时间】:2015-08-07 19:57:23
【问题描述】:

我是 SQL 新手,如果我的命名法全都错了(或者如果解决方案非常明显),我深表歉意。

我的代码是这样的:

Select Client_id, Max(Year_end_date),  Acct_Nbr    
From  (   
      --  ** subquery ** 
) As AA    
Group By Client_id, Acct_nbr;

子查询中的列与主查询相同。但是我在答案中得到了一些重复 - 对于给定的 Client_id 含义相同 DB2 返回具有不同日期的多行 - 例如

Client_id | Year_end_date | Acct_nbr   
-------------------------------------
20001       2003-12-31      01    
20001       2005-12-31      01

知道为什么吗?

【问题讨论】:

  • 请同时发布您的子查询
  • 你有一个group by,所以我最好的猜测是这些值实际上是不同的——只是隐藏的字符或意外的混淆,例如零和大写-O。
  • 子查询有点长而且复杂。我想要得到的是,如果所有计算都在子查询中完成,我可以注释掉主查询以查看子查询结果 - 为什么子查询是什么重要?主查询应该只返回 max(Year_end_date),对吧?
  • @Ardia - 你是对的。不过,我有点好奇,因为列出的顶级查询通常不需要嵌套。如果有隐藏字符(通常是空格),则需要修复数据;在此语句中执行TRIM 来修复它并不是一个好的长期解决方案,因为它使数据库更难使用索引。
  • 只是想补充一下:是的,问题出在 Acct_nbr 中。我只是没有注意到(一些)值是不同的。新手误区。再次感谢大家!

标签: sql group-by db2 max


【解决方案1】:

试试这个:

Select '>>' || Client_id || '<<', Max(Year_end_date), '>>' || Acct_Nbr || '<<'
From  (   
      --  ** subquery ** 
) As AA    
Group By Client_id, Acct_nbr;

您也可以尝试在子查询中的 Client_id 和 Acc_nbr 字段上调用 ​​TRIM()。我认为你那里有一些隐藏的空间。

【讨论】:

  • ...虽然从外观上看(希望如此)client_id 是一个自动生成的数字 id,所以最有可能的罪魁祸首是 acct_nbr
猜你喜欢
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多