gpt4 book ai didi

mysql - SQL,获取连续多次发生的结果

转载 作者:行者123 更新时间:2023-11-30 22:56:44 24 4
gpt4 key购买 nike

如何在 SQL 中获取连续发生 10 次的结果?

示例 - 我正在尝试查询结果,在本例中为捐赠。

捐赠者需要连续十年捐赠。所以 2004 年到 2014 年之间的每一年。如果他们错过了一年,他们就不能被包括在内。

所以现在,我从礼品表中选择 - GIFT

GIFT 具有 yr_code 属性、id(标识来自谁)和 gift_amt

SELECT gift_amt FROM gift WHERE yr_code = '2014' 

但我想连续 10 年有效地做到这一点。

基本上现在它是用一个 exists 子句编写的,可以历经所有岁月。所以它遍历了所有内容,说 2014 年是否有捐赠,很好,2013 年是否有捐赠,很好。等等……

     select 'x' from agbgift where 
agbgift_fisc_code = '2014' and rownum = 1 and
( exists
( select 'x' from agbgift where
agbgift_fisc_code = '2013' and
agbgift_pidm = aprdclb_pidm
)

)
and
( exists
( select 'x' from agbgift where
agbgift_fisc_code = '2012' and
agbgift_pidm = aprdclb_pidm
)
)

..... this goes on for the years.

这是以前编写的代码,我正在尝试编辑和压缩。抱歉造成所有困惑,第一次来这里。感谢您的耐心等待。

最佳答案

你的问题没有多大意义......为此我可以想到一些事情......

但据我了解你想要这样的东西

SELECT gift_amt 
FROM gift
WHERE id IN
( SELECT id
FROM
( SELECT *, @b := if(@a = yr_code, @b +1, 1) as num_yr, @a := yr_code
FROM gift
WHERE yr_code > 2004 AND yr_code <= 2014
ORDER BY id, yr_code
)t
WHERE num_yr = 1
GROUP BY id
HAVING COUNT(*) = 10
)

内部查询说给我满足要求的人的 ID...他们捐赠的年份在 04 到 14 之间(不包括 04,因为那将是 11 年)并且每年捐赠一次

DEMO

我发布的演示只是内部查询,但如果您查看它返回的内容以及该表正在运行的数据,您会看到对于 id 1,满足条件意味着它每年都有捐赠, id 2 即使每年都有多次捐赠,但它不会被退回。

奖励:

如果你想获得某人在过去 10 年中捐赠的总金额,那么只需使用 SUM()

SELECT SUM(gift_amt) 
FROM gift
WHERE id IN
( .... )

如果你想获得今年的捐赠总额,请在外部查询的 WHERE 中使用额外的过滤器

SELECT SUM(gift_amt) 
FROM gift
WHERE id IN
( .... )
AND yr_code = 2014

如果你想获得最大的捐款,但仍符合过去 10 年的标准,请使用 MAX

SELECT MAX(gift_amt) 
FROM gift
WHERE id IN
( .... )
AND yr_code = 2014 -- if you want it to be the current years greatest gift amount

关于mysql - SQL,获取连续多次发生的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26045297/

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