查找指定连续日期的算法

先看下面的日期数据找出连续三天以上的日期:

2020-01-01 
2020-01-02
2020-01-05
2020-01-06
2020-02-01
2020-02-02
2020-02-03
2020-02-04
2020-02-06
2020-02-08
2020-02-10
2020-02-11
2020-02-12
2020-02-13
2020-02-14
2020-02-16

现在数据量少可以很快用肉眼找出:

2020-02-01
2020-02-02
2020-02-03
2020-02-04

2020-02-10
2020-02-11
2020-02-12
2020-02-13
2020-02-14

下面提供一种比较有趣的思路:

构造如下一张表(date_table):

日期 (date)

递增自然整数(m)原始日期往前推递增自然整数后的日期(date_differ)
2020-01-0112019-12-31
2020-01-0222019-12-31
2020-01-0532020-01-02
2020-01-0642020-01-02
2020-02-0152020-01-27
2020-02-0262020-01-27
2020-02-0372020-01-27
2020-02-0482020-01-27
2020-02-0692020-01-28
2020-02-08102020-01-29
2020-02-10112020-01-30
2020-02-11122020-01-30
2020-02-12132020-01-30
2020-02-13142020-01-30
2020-02-14152020-01-30
2020-02-16162020-01-31

得到表后只要按照date_differ分组,累加数量看是否大于等于3,如果是则是需要的日期。

比如:date_differ列中2019-12-31出现2次不大于三,因此不满足

          date_differ列中2020-01-27出现4次大于三,满足要求

学过sql的可以参看如下sql

select date

from date_table

group by date_differ

having count(date_differ)>=3

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值