根据日期SQL的愤怒来计算

时间:2018-02-08 14:09:13

标签: mysql sql r

我有下面提到的sql查询,它给出了我在该日期的简单计数,或者如果我使用whereand条件作为日期,它给出了日期之间的合并计数。

select count(*) from A where date(date_1) = '2017-06-01';

我想要计算每个日期的单独计数的日期范围。

select count(*) from A where date(date_1) >= '2017-06-01' and date(date_1)<='2017-06-30';

Desired output:

Date          Count

2017-06-01    25
2017-06-02    20
2017-06-03    15
-             -
-             -
2017-06-30    10

3 个答案:

答案 0 :(得分:2)

您只需要使用group by子句,如:

SELECT date(date_1),Count(*) as [Count]
FROM A
WHERE date(date_1) >= '2017-06-01' and date(date_1)<='2017-06-30'
GROUP BY date(date_1)

答案 1 :(得分:1)

以下内容可能有效:

SELECT DATE(date_1), COUNT(*)
FROM A
GROUP BY DATE(date_1)
作为aggregate function

COUNT通常与GROUP BY子句结合使用,以便获得每个组的汇总结果(在这种情况下,每个日期的计数)。

WHERE条款当然可以根据需要添加到GROUP BY子句之前。

答案 2 :(得分:1)

以下解决方案还会报告没有发生任何事件的日期。这个例子是针对二月份设计的:

    SELECT (DATE'2018-01-31' + INTERVAL x.n DAY) dd
         , COALESCE(sqt.c, 0)                    incidents
      FROM (select 1 n union all select 2 n union all select 3 n union all select 4 n union all select 5 n union all select 6 n union all select 7 n union all select 8 n union all select 9 n union all select 10 n union all select 11 n union all select 12 n union all select 13 n union all select 14 n union all select 15 n union all select 16 n union all select 17 n union all select 18 n union all select 19 n union all select 20 n union all select 21 n union all select 22 n union all select 23 n union all select 24 n union all select 25 n union all select 26 n union all select 27 n union all select 28 n) x
 LEFT JOIN (
                SELECT date1    d
                     , count(*) c
                  FROM t
              GROUP BY date1
           ) sqt
        ON sqt.d = (DATE'2018-01-31' + INTERVAL x.n DAY)
         ; 

可以查看独立演示here

序列生成器已被无耻地从this SO answer采用。