【问题标题】:Count cases by dates in mysql在mysql中按日期计算案例
【发布时间】:2017-05-27 20:18:28
【问题描述】:

我有一个关于mysql的问题:

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

我想统计一下从 2011 年到 2017 年每个日期有多少案例在活跃使用。

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

欣赏!

【问题讨论】:

  • 你尝试过什么?我们可以得到一些示例数据和预期的输出吗?
  • @SebastianBrosch 我自己的想法是逐日选择 start_date 和 end_date 之间的案例。
  • 为了在 Stack Overflow 上获得最佳结果,当您询问如何创建查询时,您应该提供几行示例数据和几行您想要的结果。
  • 如果您有这些格式的日期,请使用 substr(start_date, 0, 10)。您可以在 select、while 子句甚至 group by 上使用它。

标签: mysql datetime


【解决方案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
;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 2020-07-24
    相关资源
    最近更新 更多