mysql关于某段时间内连续日期的查询

例如,当前时间2017-12-28,我要查询前7天的数据,即
2017-12-22
2017-12-23
2017-12-24
2017-12-25
2017-12-26
2017-12-27
2017-12-28
这7天的数据,但是如果表里某一天(2017-12-25)没有数据,查询就会没有这一天,而只有
2017-12-22
2017-12-23
2017-12-24
2017-12-26
2017-12-27
2017-12-28
我想要的是,即使这一天没有数据,我也要能把日期查出来,数量记为0
怎么去查询(PS:不采用日期表)

用日期列表 left join数据列表就可以了吧并加上isnull(var,0)

数据库查询数据,应用程序组装处理

其实你这个要实现的功能,如果不采用日期表的话,不建议通过数据库来处理,而通过在应用程序中来实现或者如果你是在前段展示的话,建议在前端对数据做判断。
个人建议:根据库中的数据查询得到已经存在的日期和对应的数据。然后在你使用的地方做第二步工作,也就是将不存在的日期数据展示数为0.
实现思路大概是:
根据你的查询参数然后你知道自己需要判断的7天日期分别是哪7天。然后在对已知的7天数据遍历展示或者是做其他你想要的处理工作的过程中。
首先从你数据库中查询到的数据集合中查看是否存在关于当前日期的记录,如果有则使用对应记录的数量。如果没有,则使用对应日期的数量为0.
我们假设你需要的不是7天,而是一个月,那也就30天。30条数据的遍历判断放到程序中或者是前端浏览器都不会有多大影响。而数据库资源相对来说比较宝贵,所以不建议做复杂的判断查询之类的。
至于拿到指定日期去获取该日期是否存在的判定,要看你查询收集的记录是以什么形式的展示,如果是对象,那你需要对象.属性和日期来判断。如果你是Map来收集。那你应该是map.get()获取对应的日期来对比。总的来说思路就是这样的。
如果你就只能走数据库里查询来实现。那我觉得你还是使用日期表比较好。
个人思路仅供参考。

mysql> SELECT DAYOFMONTH(’2017-12-28’);

select * from article where date_sub(curdate(), INTERVAL 7 DAY) <= date(add_time);

很简单阿,你先求出7天前是那天 2017-12月21,然后
Select * from table where theDate > '2017-12-21' and the Date < '2017-12-28' ,

Select * from table where theDat > '2017-12-21' and the Date < '2017-12-28' ,

你可以不用建日期表,但可以用日期临时表来解决

Select * from table where theDat > '2017-12-21' and the Date < '2017-12-28' and the Date < '2017-12-28' and the Date < '2017-12-28'

Select * from table where theDat > '2017-12-21' and the Date < '2017-12-28' and the Date < '2017-12-28' and the Date < '2017-12-28' 这个可是试试

建表的时候有个字段有默认值且不能为空,就不会出现你说的情况。

Select * from table where theDat > '2017-12-21' and the Date < '2017-12-28' and the Date < '2017-12-28' and the Date < '2017-12-28'

先order by 一下,然后rownum<=7

select nvl(查询值,0) from 表名,
若查询出的值为空,则自动补0。

前段时间项目封装过类似的数据,给你讲下思路吧,把你需要封装的天数封装成一个数组,比如传的时间begin ,end;把你需要的日期封装进去。
然后查出数据库这段时间的数据。遍历你查询出来数据的时间与每天条数与你前面封装的日期数组做比较,日期相同则赋值,日期不同则设值为0

用Select count( *) from table where theDat =''来判断是否有数据

列表 left join数据列表就可以了吧并加上isnull(var,0),再写个日查询SQL语句