【问题标题】:SQL - Return all records for an account based on comparison between records for that accountSQL - 根据该帐户的记录之间的比较返回该帐户的所有记录
【发布时间】:2023-04-04 05:37:01
【问题描述】:

这里是 SQL 新手。因此,我想从表中返回至少有一条记录满足特定条件的帐户的记录。

我们有一个程序应该先将现金分配给旧发票,然后再分配新发票。不是,我需要找到受影响的记录。

如果有的话,我想返回一个账户的所有记录;
未结金额 > 0 对于比未结金额为零或小于总金额的同一帐户的记录更早的记录。


因此,在下面的示例中,帐户 A1 已正确分配。我希望我的查询返回帐户 B2 和 C3 的所有记录。


我认为我需要使用 HAVING 和可能的子查询的某种组合,但它让我感到困惑!任何帮助是极大的赞赏!谢谢。

UKID     ACCOUNT    DATE        OPEN_AMOUNT    GROSS_AMOUNT
1        A1         12/03/14    100            100  
2        A1         12/02/14    0              150
3        B2         21/03/14    0              100  
4        B2         21/02/14    100            100
5        C3         01/03/14    50             100
6        C3         01/02/14    50             100

【问题讨论】:

  • Stack Overflow 的工作方式是,为了表明您的问题已得到解答,您应该选择最有用的答案并将其标记为已接受(答案左上角的复选标记)。您不会编辑标题以说“已解决”。目前尚不清楚哪个答案实际上解决了您的问题 - 或者如果您以单独的方式解决了它,请添加有关您如何解决它的信息作为答案(您可以回答你自己的问题)。这样,它在未来对其他人更有用。

标签: sql subquery having


【解决方案1】:

你应该可以这样做:

SELECT * 
FROM YourTable
WHERE ACCOUNT IN (
                    SELECT DISTINCT ACCOUNT
                    FROM YourTable
                    WHERE OPEN_AMOUNT <> 0
                 )

您需要第二个查询来确定所有未结金额为零的帐户。然后使用该列表,您可以获得与其关联的所有记录。

【讨论】:

  • 谢谢,但在我的示例中,您的查询不会返回帐户 A1 吗?我试图避免选择这些记录。我希望只返回早期记录的未结金额和存在后期记录的记录,该记录的未结金额为 0 或金额小于总金额...
【解决方案2】:

类似

select *
from   mytable
where  account in (select ext.account
                   from   mytable ext
                   inner join (SELECT account, date 
                              FROM mytable ext 
                              WHERE OPEN_AMOUNT = 0 
                                 or OPEN_AMOUNT < gross_amount) sub
                              on ext.account = sub.account 
                             and ext.date < sub.date
                   where  open_amount > 0)

应该这样做。

如果您需要更像链控制的东西,那就更难了。

您能否指定您正在使用的数据库?一些特定于数据库的功能实际上可以提供很多帮助。

【讨论】:

  • 很抱歉我昨天一整天都在开会时回复缓慢-这似乎已经解决了问题!非常感谢。我会提供赞成票,但我的帐户太年轻了! - 要回答您的问题,数据库是 IBM AS400,但我必须在本地机器上使用 iSeries 数据传输应用程序来查询数据库。我是贸易业务分析师而不是 DBA,所以我真的无法访问后端!不过感谢您的帮助...
猜你喜欢
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-14
  • 1970-01-01
相关资源
最近更新 更多