gpt4 book ai didi

sql - 查找表中下一次出现的值

转载 作者:行者123 更新时间:2023-12-04 21:20:23 24 4
gpt4 key购买 nike

如果这已经被覆盖,请提前抱歉。

我正在开发一个结构不是特别好的数据库,但它归第三方所有,无法更改。

我需要一些 t-sql 帮助来查找表中下一次出现的值并根据结果返回记录。我先解释一下数据。我已经简化了这一点,使其更容易理解。

Polref      Effective Date       Transaction Type     Suffix        Value
ABCD1 01/06/2010 New Bus 1 175.00
ABCD1 01/06/2011 Ren 2 200.00
ABCD1 19/08/2011 Adjust 3 50.00
ABCD1 23/04/2012 Adjust 4 50.00
ABCD1 01/06/2012 Ren 5 275.00

因此,如果我运行 2011 年的查询,则代码需要在此示例中返回后缀为 2,3 和 4 的行。所以我一直在尝试找到指定年份的 New Bus 或 Ren 的第一个后缀然后为相同的 polref 找到 New Bus 或 Ren 的下一个后缀,然后使用这两个后缀值来限制我的记录集。它不工作!!

我不能使用 MAX(),因为 2013 年的交易已经添加到系统中,我会得到比我实际需要的更多的记录。

对于这个示例数据,我应该期待的结果是:

ABCD1 300.00

任何帮助将不胜感激。

回答另一个问题,如果我选择 2011 作为我运行报告的年份,那么 2011 年应该只有一个 New Bus 或 Ren 交易,所以如果是 New Bus 交易,那么下一个主要交易将是 Ren,如果是 Ren那么下一个主要交易将是一个仁。同样在下面的示例中,如果我运行 2011 年,它应该找到 01/06/2011 的 Ren,因此我想返回那个 Ren 和两个 Adjust 记录。

对不起,我以前没有使用过这个论坛,如果我有点含糊,请见谅。

我使用的表有很多 polrefs,所以我需要这个代码来计算所有落在日期范围内的 polrefs 的总数。一些 polrefs 可能只有一排,一辆新巴士,有些会有多排,这取决于整个政策一年中进行了多少调整

最佳答案

部分答案:

这个查询:

declare @t table (PolRef char(5) not null, EffectiveDate date not null,TransactionType varchar(10) not null,Suffix int not null,Value decimal(10,2) not null)
insert into @t (Polref,EffectiveDate,TransactionType,Suffix,Value) values
('ABCD1','20100601','New Bus',1,175.00),
('ABCD1','20110601','Ren',2,200.00),
('ABCD1','20110819','Adjust',3,50.00),
('ABCD1','20120423','Adjust',4,50.00),
('ABCD1','20120601','Ren',5,275.00)

;With StartTransactions as (
select PolRef,Suffix,ROW_NUMBER() OVER (PARTITION BY PolRef ORDER BY Suffix) rn
from @t where TransactionType in ('New Bus','Ren')
), Periods as (
select st1.PolRef,st1.Suffix as StartSuffix,st2.Suffix as EndSuffix
from
StartTransactions st1
left join
StartTransactions st2
on
st1.PolRef = st2.PolRef and
st1.rn = st2.rn - 1
)
select
p.PolRef,t2.EffectiveDate,SUM(t.Value) as Total
from
Periods p
inner join
@t t
on
p.PolRef = t.PolRef and
p.StartSuffix <= t.Suffix and
(p.EndSuffix > t.Suffix or
p.EndSuffix is null)
inner join
@t t2
on
p.PolRef = t2.PolRef and
t2.Suffix = p.StartSuffix
group by
p.PolRef,t2.EffectiveDate

根据每个连续的交易对每组交易进行分组 RenNew Bus交易:
PolRef EffectiveDate Total
------ ------------- ---------------------------------------
ABCD1 2010-06-01 175.00
ABCD1 2011-06-01 300.00
ABCD1 2012-06-01 275.00

从那以后,它应该是微不足道的,例如仅从特定年份中选择您感兴趣的那些。但是你的问题在某些细节上仍然含糊不清,所以我现在不会再进一步​​了。

关于sql - 查找表中下一次出现的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13141899/

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