繁体   English   中英

在日期死亡后查找第一笔交易

[英]Finding first transaction after death of date

任何人都可以帮助增强下面的查询,

select 
columns
from 
(
select t.*,
sum (case when TRAN_DATE >= '20170701' then 1 end)
over (partition by acct_no order by TRAN_DATE, TRAN_TIME ) as sm_i
from (
Select 
Columns
FROM 
#BASEtable DTRAN
INNER JOIN sometable 
where condition) t) t
where sm_i = 1 
order by acc_no

这是数据示例,(附加)

Company Acct_no Tran_Date   Death_of_date
1   123 20170725    20170702
1   123 20170825    20170702
1   123 20170925    20170702
2   456 20191025    20200101
2   456 20191125    20200101
2   456 20191225    20200101

预期结果:第 1 行,因为这是该帐户在 death_of_date 之后的第一笔交易

我正在根据 20170701 对数据进行排序,也就是说,它将选择在该日期之后发生的第一笔交易,该日期应与上述查询一起使用。

现在,我想用动态值设置“20170701”的值,即需要每个账户在其死亡日期后的第一笔交易..

我用下面的代码替换了分区代码,

sum(case when tran_Date > = (select death_of_date from #basetable a where a.acct_no = t.acct_no ) then 1 end)
over partition by acct_no order by tran_Date , tran_Time) as sm_i 

但是出现错误说,子查询重新调整了多个结果,这不是使用>,=等的应用程序。

请帮助在 sql 服务器中增强此代码。 提前感谢您的帮助!

在此处输入图像描述

假设两件事:

  1. 您有您指定的四列数据。
  2. 对于每个帐户,您希望第一行满足您的日期条件。

然后你可以使用 window 函数和过滤:

select t.*
from (select t.*,
             row_number() over (partition by Company, Acct_no order by Tran_Date) as seqnum
      from t
      where tran_date > death_of_date
     ) t
where seqnum = 1;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM