[英]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 服务器中增强此代码。 提前感谢您的帮助!
假设两件事:
然后你可以使用 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.