SQL每日一题(20201029)在不同日期有个不同的金额,统计连续增长天数和连续负增长天数

SQL每日一题(20210420)
SQL每日一题(20210804)
SQL每日一题(20211122)
SQL每日一题(20220311)

在这里插入图片描述
/*
1.首先根据金额差值是否大于0来判断正负
2.然后使用row_number 根据增长方向 代码 分组 日期进行排序 t1 根据代码进行排序t2
3.用t2-t1来判断是不是连续增长的日期
4.最后使用row_number 根据代码 增长方向 是否是连续的月进行分组 日期进行排序
*/在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

SELECT c.日期,
       c.代码,
       c.金额,
       c.金额差异值,
       c.增长方向,
       row_number() over (partition by c.代码,c.增长方向,c.P3 order by c.日期) as 连续增长天数
from (SELECT *,
             ( cast(b.P1 as signed)-  cast(b.P2 as signed)) as P3
      from (select *,
                   row_number() over (partition by a.增长方向,a.代码 order by a.日期 ) as P1,
                   row_number() over (partition by a.代码 order by a.日期 )        as P2
            from (SELECT *, case when 金额差异值 >= 0 then '正' else '负' end as 增长方向 from T1029) a ORDER by a.代码,a.日期) b) c
order by c.代码, c.日期

在这里插入图片描述

with  v0112 AS
(
SELECT *,
       CASE WHEN 金额差异值 >= 0 THEN '正' ELSE '负' END      AS 增长方向,
       ROW_NUMBER() OVER (PARTITION BY 代码 ORDER BY 日期) AS rn
FROM T0112)

SELECT a.*,IFNULL((SELECT b.rn
                      FROM v0112 b
                      WHERE b.代码 = a.代码 AND b.rn < a.rn AND b.增长方向 <> a.增长方向
                      ORDER BY b.rn DESC
                      LIMIT 1), 0) as result,
       a.rn - IFNULL((SELECT b.rn
                      FROM v0112 b
                      WHERE b.代码 = a.代码 AND b.rn < a.rn AND b.增长方向 <> a.增长方向
                      ORDER BY b.rn DESC
                      LIMIT 1), 0) AS 连续天数
FROM v0112 a;
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

time丶sand

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值