查找具有累计父行数量的金额的连续子行

时间:2014-06-06 02:57:39

标签: sql sql-server tsql sequential

我有一个如下表

ID  DATE       ACCT  TYPE  AMOUNT    SEQ  CHK#   TRC
1   6/5/2014   1234   C    10,000     1          1001
2   6/5/2014   3333         3,000     2   123    1002
3   6/5/2014   4444         5,000     3   234    1003
4   6/5/2014   5555         2,000     4   345    1004
5   6/5/2014   2345   C     3,000     1          1007
6   6/5/2014   5555         2,500     2   255    1008
7   6/5/2014   7777           500     3   277    1009
8   6/6/2014   1234   C     5,000     1          2001
9   6/6/2014   7777         3,000     2   278    2002
10  6/6/2014   8888         2,000     3   301    2003
  

TYPE = C的行是顺序执行的子行的父行。   父行没有CHK#,子行确实有CHK#。每   父行具有seq#= 1,子行具有序列号。 (如果它   事项)从上表中,行ID 1是行的父行   ID 2~4。子行上的AMOUNT加起来为父行   量。

     

使用帐户#2345查询“6/5/2014”日期的交易   金额为3,000 - 结果应为ID为6和7的行。

     

使用MS-SQL 2008可以进行此类查询吗?如果是的话,你能告诉我吗?   知道?

1 个答案:

答案 0 :(得分:2)

根据您拥有的数据,您可以使用id列查找所需的行。首先,查找具有该金额的支票的那个。查找具有相同组的后续id。你如何定义这个群体?这很容易。取idseq之间的差异。对于父行和子行,此差异是不变的。

所以,这是:

select t.*
from table t
where (t.id - t.seq) = (select t2.id - t2.seq
                        from table t2
                        where t2.type = 'C' and
                              t2.acct = '2345' and
                              t2.date = '6/5/2014'
                       ) and
      t.type is null;