首页 > 解决方案 > 如何在 SQL Server 中获取累积记录?

问题描述

我在 SQL Server 中有一些以下格式的数据。

declare @statement table 
                   (
                       acctno int,
                       statDate date,
                       tod int,
                       lastDate date 
                   )

 insert into @statement select 123,'2018-02-12',567,'2018-01-12'
 insert into @statement select 123,'2018-03-12',580,'2018-02-12'
 insert into @statement select 123,'2018-04-12',567,'2018-03-12'

 --select * from @statement


  declare @txn table 
               (
                   acct int,
                   txndate date,
                   amount int
               )

 insert into @txn select 123,'2018-02-11',400
 insert into @txn select 123,'2018-02-18',400
 insert into @txn select 123,'2018-02-25',400
 insert into @txn select 123,'2018-03-11',400
 insert into @txn select 123,'2018-03-25',400

两个表的结果类似如下。

表格结果] 1

现在我想要如下所示的结果:

预期结果

我试图用这个查询来得到它:

 ;with cte  as 
 (
     select 
         acctno, statDate, tod, txndate, amount, lastDate  
     from 
         @statement
     inner join 
         @txn on acctno = acct
 )
 select * 
 from @txn t
 left join cte on acct = acctno
               and t.txndate between statDate and lastDate

但是结果没有按预期返回 - 请帮助我获得所需的结果。

标签: sql-servercommon-table-expression

解决方案


我认为你可以更简单地做到这一点

select s.acctno,statDate,tod,txndate,amount,lastDate
from @txn t
Inner join @statement s
  On  s.acctno = t.acct
  And t.txndate Between s.lastDate and s.startDate

您可能需要将 BETWEEN 更改为“<”以进行 startDate 比较。


推荐阅读