gpt4 book ai didi

sql - 计算跨越多个日期范围的记录

转载 作者:搜寻专家 更新时间:2023-10-30 23:16:51 25 4
gpt4 key购买 nike

ACCOUNT   Amount     DATE
1 50 01-2010
1 100 03-2010
1 100 02-2011
2 100 01-2011
2 50 05-2011
2 50 09-2011
3 100 03-2012
3 100 03-2013

是否有一种查询结构可以让我计算跨越当前和过去一年的不同账户?例如,账户 1 有 2011 年和 2010 年的金额,因此它应该在 2011 年计算一次。账户 2 只有 2011 年的金额,因此不会被计算在内,而账户 3 有 2013 年和 2012 年的金额,因此它被计算为 1 2013 年以下:

 2010   2011    2012    2013                
0 1 0 1

最佳答案

首先,您需要知道您拥有帐户数据的年份:

select account, year(date) as yr
from t
group by account, year(date)

接下来,您需要查看两年是否按顺序排列。你可以在 2012 年以滞后/领先的方式做到这一点。相反,我们将只使用自连接:

with ay as (
select account, year(date) as yr
from t
group by account, year(date)
)
select ay.account, ay.yr
from ay join
ay ayprev
on ay.account = ayprev.account and
ay.yr = ayprev.yr + 1

接下来,如果你想按年计算账户数量,只需将其放入一个聚合中即可:

with ay as (
select account, year(date) as yr
from t
group by account, year(date)
)
select yr, count(*) as numaccounts
from (select ay.account, ay.yr
from ay join
ay ayprev
on ay.account = ayprev.account and
ay.yr = ayprev.yr + 1
) ayy
group by yr

关于sql - 计算跨越多个日期范围的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12151389/

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