Mysql从特定日期选择1周的数据

时间:2014-09-12 11:56:22

标签: mysql sql

我有两个表项目和项目资助。

产品表就像,

+-----------------+
| id | date_created |
+-----------------+
| 1  | 2014-09-10 |
| 2  | 2014-05-20 |
| 3  | 2014-02-20 |
| 4  | 2014-02-20 |
+-----------------+

我的project_funded表就像,

+------------------------------+
| id | date_funded | Proj_id  |
+------------------------------+
| 1  | 2014-09-10 |      1    |
| 2  | 2014-09-11 |      1    |
| 3  | 2014-09-11 |      1    |
| 4  | 2014-09-12 |      1    |
+------------------------------+

现在如何从项目开始日期开始获取项目1 next 1 week data count

示例, Project_id 1 在2014-09-10,

启动

我需要像

这样的结果
2014-09-10 => 1
2014-09-11 => 2 
2014-09-12 => 1

1 个答案:

答案 0 :(得分:0)

这是一个基于...的群组的基本查询。

select
      pf.date_funded,
      count(*) as totalEntries
   from
      project_funded pf
   where
      pf.proj_id = 1
   group by
      pf.date_funded
   order by
      pf.date_funded

现在,如果您只关心项目创建日期后的一周,则需要额外加入项目表,并且需要基于项目创建日期的日期范围限制。

select
      pf.date_funded,
      count(*) as totalEntries
   from
      project_funded pf
         JOIN project p
            on pf.proj_id = p.id
   where
          pf.proj_id = 1
      AND pf.date_funded >= p.date_created
      AND pf.date_funded <  DATE_ADD(p.date_created, INTERVAL 8 DAY);
   group by
      pf.date_funded
   order by
      pf.date_funded

在上面的日期示例中,您提到了1周(7天),这可能是一个间隔1周。但是,如果您的日期是基于日期/时间,那么您真的希望所有7天到达并延迟到晚上11:59:59。这就是为什么我做了不到8天 - 所以它包括从第8天到第8天结束前的7天。