[SQL]连续三天有销售额
店铺 销售日期 销售额 A 2017-10-11 300 A 2017-10-12 200 B 2017-10-11 400 B 2017-10-12 200 A 2017-10-13 100 A 2017-10-15 100 C 2017-10-11 350 C 2017-10-15 400 C 2017-10-16 200 D 2017-10-13 500 E 2017-10-14 600 E 2017-10-15 500 D 2017-10-14 600 B 2017-10-13 300 C 2017-10-17 100
需求是:求出连续三天有销售记录的店铺。
解法:
寻找每个店铺是否连续三天都有销售额,利用现有的表,构造一个中间表,中间表既有当前日期的销售额,又有当前日期后两天的销售额,然后筛选销售额大于0的店铺的名称即可:
SELECT a.Name FROM sales a LEFT JOIN sales b on a.name = b.name and DATEDIFF(STR_TO_DATE(b.day,'%Y-%m-%d'),STR_TO_DATE(a.day,'%Y-%m-%d')) = 1 LEFT JOIN sales c on b.name = c.name AND DATEDIFF(STR_TO_DATE(c.day,'%Y-%m-%d'),STR_TO_DATE(b.day,'%Y-%m-%d')) = 1 WHERE a.amount > 0 AND b.amount > 0 AND c.amount > 0;
可以看到需要借助str_to_date和datediff函数处理日期的差值,每一条记录相邻两个日期在天数上依次添加1,不满足这样条件的为null值。我们在此基础上增加where条件过滤amount>0,并筛选出店铺名称即可。
作者:薛定谔的ハチ公
申明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。