先看下面的日期数据找出连续三天以上的日期:
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-01 | 1 | 2019-12-31 |
2020-01-02 | 2 | 2019-12-31 |
2020-01-05 | 3 | 2020-01-02 |
2020-01-06 | 4 | 2020-01-02 |
2020-02-01 | 5 | 2020-01-27 |
2020-02-02 | 6 | 2020-01-27 |
2020-02-03 | 7 | 2020-01-27 |
2020-02-04 | 8 | 2020-01-27 |
2020-02-06 | 9 | 2020-01-28 |
2020-02-08 | 10 | 2020-01-29 |
2020-02-10 | 11 | 2020-01-30 |
2020-02-11 | 12 | 2020-01-30 |
2020-02-12 | 13 | 2020-01-30 |
2020-02-13 | 14 | 2020-01-30 |
2020-02-14 | 15 | 2020-01-30 |
2020-02-16 | 16 | 2020-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