按日期在mysql中计算案例

时间:2017-05-27 20:18:29

标签: mysql datetime

我有一个与mysql相关的问题:

我有一个名为“datelist”的表列出了从2011年到2017年的所有日期。我得到另一个表“sqltest”,其中有两列“start_date”和“end_date”,显示使用日期信息激活的产品。这两列是日期时间类型变量,例如:2016-02-17 21:52:26.594847。

我想计算从2011年到2017年每个日期有多少案例的使用情况。

我是mysql的新手,有人可以指导我如何处理这个问题吗?

欣赏!

1 个答案:

答案 0 :(得分:1)

如果没有您的数据,我们必须从简短问题中提供的线索中猜测。我们知道有2个表和2个列名称,但第二个表中的列名是未知的。该问题隐含的时间精度存在差异,但未通过样本数据验证。

我认为提及时间精度的原因是在查询中进行了一些补偿,以确保记录一天中活动的任何测试。例如,2016-02-17日期记录测试开始于2016-02-17 21:52:26.594847

示例数据:

CREATE TABLE sqltest
    (`start_date` datetime, `end_date` datetime)
;

INSERT INTO sqltest
    (`start_date`, `end_date`)
VALUES
    ('2016-02-17 21:52:26', '2016-02-27 21:52:26')
;


CREATE TABLE datelist
    (`a_date` datetime)
;

INSERT INTO datelist
    (`a_date`)
VALUES
    ('2016-02-01 00:00:00'),
    ('2016-02-02 00:00:00'),
    ('2016-02-03 00:00:00'),
    ('2016-02-04 00:00:00'),
    ('2016-02-05 00:00:00'),
    ('2016-02-06 00:00:00'),
    ('2016-02-07 00:00:00'),
    ('2016-02-08 00:00:00'),
    ('2016-02-09 00:00:00'),
    ('2016-02-10 00:00:00'),
    ('2016-02-11 00:00:00'),
    ('2016-02-12 00:00:00'),
    ('2016-02-13 00:00:00'),
    ('2016-02-14 00:00:00'),
    ('2016-02-15 00:00:00'),
    ('2016-02-16 00:00:00'),
    ('2016-02-17 00:00:00'),
    ('2016-02-18 00:00:00'),
    ('2016-02-19 00:00:00'),
    ('2016-02-20 00:00:00'),
    ('2016-02-21 00:00:00'),
    ('2016-02-22 00:00:00'),
    ('2016-02-23 00:00:00'),
    ('2016-02-24 00:00:00'),
    ('2016-02-25 00:00:00'),
    ('2016-02-26 00:00:00'),
    ('2016-02-27 00:00:00'),
    ('2016-02-28 00:00:00'),
    ('2016-02-29 00:00:00')
;

示例查询

select
      d.a_date
    , count(t.start_date)
from datelist d
left join sqltest t on d.a_date between DATE_SUB(t.start_date,INTERVAL 1 DAY)  and t.end_date
group by
      d.a_date
;