下图为一张订单表(order1),现希望查找出至少连续3天下单的用户。
![](https://pics6.baidu.com/feed/34fae6cd7b899e517b84313507fc3736c8950d6d.jpeg?token=cec090054fb42d0a6b9112dc1907df3b&s=8011CC32494EC0CE066DE9DF0000D0B2)
第一步:将订单表按UserId分组根据日期Date排序。
![](https://pics2.baidu.com/feed/b8014a90f603738d11d52ce3f8405e54f919ec31.jpeg?token=a15a8903aed619854d200b0b39bf6265)
注:窗口函数row_number()mysql8.0及以上版本可用。
![](https://pics5.baidu.com/feed/9922720e0cf3d7caa59e3a7ab744500c6b63a937.jpeg?token=4a8b2343d394e4d0cd10cdfe80da9e1f&s=4018CC32594ED4CC567DE4DA000080B2)
第二步:用日期Date减去对应的排序号Num,若日期是连续的,则相减的结果Datedif相等。
![](https://pics3.baidu.com/feed/fd039245d688d43fe88e899038453c1e0ef43b09.jpeg?token=0bef0f1d3e31a34b2d80881868b5b10f&s=D9A43C724B626D204E7D00DA000080B1)
![](https://pics3.baidu.com/feed/b999a9014c086e06636c6437475395f10bd1cb63.jpeg?token=2329775827fab41bee1ba085e3a8bf6b&s=C918CD1A416EC0EE507DE4DA0000E0B2)
第三步:按UserId,Datedif分组计数,得到各用户的连续下单天数。
![](https://pics0.baidu.com/feed/2fdda3cc7cd98d100daa02756464560b7aec90dc.jpeg?token=0758a09ebb53f2f09ad33b15cd81d242&s=18A07C3203B04D2216D9C1DA0000C0B3)
![](https://pics1.baidu.com/feed/79f0f736afc379314d4833cbaf9f594042a91194.jpeg?token=161ffebd1d66651ded2af33ee77bbe16&s=C0184D321F4A5C4D4E7D14DA000050B2)
第四步:筛选连续下单天数≥3的用户
![](https://pics5.baidu.com/feed/f636afc379310a556d310286f21eadac82261008.jpeg?token=465c6129d1b1abdb40916628ea105e3a&s=38247C3203525D641E59C0DA0000C0B3)
第三步和第四步也可合并为一步,即:
![](https://pics3.baidu.com/feed/64380cd7912397dd8e95a7ec1dd95cb2d2a287ce.jpeg?token=6296b482076d03789cdd6584654d09d8&s=D8203C721B234D220E59C0DA0000C0B3)
得到至少连续3天下单的用户如下:
![](https://pics6.baidu.com/feed/4034970a304e251fb181b1cce2dd27127f3e5374.jpeg?token=aea344980f7d20476c23bec8de07c9f6&s=C018CD3A05327D22486D44DB000010B2)
第一步也可使用自定义变量的方式实现:
![](https://pics3.baidu.com/feed/adaf2edda3cc7cd953ed64b7715acf3ab90e9179.jpeg?token=74ead97b490e0b8a11170578db8545e8)
因此最终代码也可表示为:
![](https://pics0.baidu.com/feed/d53f8794a4c27d1e0e8bcdc95e8e436bdcc438eb.jpeg?token=bdd3da4895eb92eb78fa39e96cbb3e5b&s=58A03C7207A24D20586D8CDA0000C0B3)