首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >填充mysql查询范围中缺少的日期

填充mysql查询范围中缺少的日期
EN

Stack Overflow用户
提问于 2016-04-11 20:32:29
回答 1查看 1.4K关注 0票数 0

我有以下查询:

代码语言:javascript
运行
复制
select date(updated_at) as data, COUNT(id) as numar 
from `coupons`
where `user_id` = 5 and `won_by` != 0 and `updated_at` >= '2016-04-01'
group by DAY(updated_at), month(updated_at), year(updated_at)

结果是:

代码语言:javascript
运行
复制
2016-04-01-   229
2016-04-03-   30
2016-04-04-   6
2016-04-07-   1
2016-04-08-   1
2016-04-10-   1

我能做什么才能得到这样的东西:

代码语言:javascript
运行
复制
2016-04-01-   229
2016-04-02-   0
2016-04-03-   30
2016-04-04-   6
2016-04-05-   0
2016-04-06-   0
2016-04-07-   1
2016-04-08-   1
2016-04-10-   1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-11 20:49:40

我发现这样做的最佳方法是简单地创建(并维护)一个包含您所关心的所有日期的单列的辅助表。类似于:

创建表date_join (日期日期不为空主键);

然后以任何方便的方式为每个日期插入记录(如果它是一次性的,作为日常过程的一部分,通过存储过程等等)。

在这一点上,它只是date_join和初始查询的一个左联接,带有一个CASE语句将NULL转换为0:

代码语言:javascript
运行
复制
SELECT dj.date, q.numar
  FROM      date_join dj
  LEFT JOIN (select date(updated_at) as date, COUNT(id) as numar 
               from `coupons`
              where `user_id` = 5 and `won_by` != 0 and `updated_at` >= '2016-04-01'
              group by DATE(updated_at)
            ) q
         ON dj.date = q.date
   ORDER BY dj.date;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36558715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档