SQL - 根据该帐户的记录之间的比较返回帐户的所有记录

时间:2014-04-01 13:53:46

标签: sql subquery having

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

2 个答案:

答案 0 :(得分:1)

你应该可以这样做:

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

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

答案 1 :(得分:0)

这样的东西
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)

应该这样做。

如果你需要更像连锁控制的东西,它会更加难以理解。

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