gpt4 book ai didi

sql - 上一次值由负变为正

转载 作者:行者123 更新时间:2023-12-04 19:16:38 25 4
gpt4 key购买 nike

当 Balance 字段最后一次从负值变为正值时,如何通过 PersonID 返回日期?

在下面的示例数据中,对于 PersonID 1,它发生在 2019 年 7 月 8 日,对于 PersonID 2,它发生在 2019 年 8 月 8 日。值可以多次从负值变为正值,但它应该只引用最近一次发生了。

enter image description here

预期输出:

enter image description here

我有以下样本数据

Create Table #temp
(
PersonID int,
ActionDate date,
Balance money
)
insert into #temp
(
PersonID,
ActionDate,
Balance
)
select
1,
'01 Jul 2019',
-100
union all
select
1,
'02 Jul 2019',
-45
union all
select
1,
'03 Jul 2019',
-80
union all
select
1,
'04 Jul 2019',
-20
union all
select
1,
'05 Jul 2019',
40
union all
select
1,
'06 Jul 2019',
-40
union all
select
1,
'07 Jul 2019',
-90
union all
select
1,
'08 Jul 2019',
-150
union all
select
1,
'09 Jul 2019',
100
union all
select
1,
'10 Jul 2019',
120
union all
select
1,
'11 Jul 2019',
130
union all
select
1,
'12 Jul 2019',
140
--
union all
select
2,
'01 Aug 2019',
-100
union all
select
2,
'02 Aug 2019',
-45
union all
select
2,
'03 Aug 2019',
80
union all
select
2,
'04 Aug 2019',
20
union all
select
2,
'05 Aug 2019',
-40
union all
select
2,
'06 Aug 2019',
-40
union all
select
2,
'07 Aug 2019',
40
union all
select
2,
'08 Aug 2019',
-40
union all
select
2,
'09 Aug 2019',
45
union all
select
2,
'10 Aug 2019',
65
union all
select
2,
'11 Aug 2019',
23
union all
select
2,
'12 Aug 2019',
105

最佳答案

使用 not exists 这可能会做你想做的事。它找到最后一个负余额:

select t.*
from #temp t
where t.balance < 0 and
not exists (select 1
from #temp t2
where t2.personid = t.personid and
t2.actiondate > t.actiondate and
t2.balance < 0
);

如果你想要最后的变化,你可以使用窗口函数进行过滤:

select t.*
from (select t.*,
row_number() over (partition by personid order by actiondate desc) as seqnum
from (select t.*,
lead(balance) over (partition by personid order by actiondate) as next_balance
from #temp t
) t
where t.balance < 0 and
t.next_balance > 0
) t
where seqnum = 1;

关于sql - 上一次值由负变为正,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57582657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com