如何计算每天的相同日期值

时间:2018-01-18 21:40:19

标签: mysql sql date datetime count

我完全不知所措,但甚至不知道这个查询的类型。

顺便说一句。我希望通过加入同一个表来获得count Date(MYdatetime)类型值per day

有没有比较此查询的问题?

我有这样的查询:

select 
    date_format(
        adddate('2011-1-1', @num:=@num+1), 
        '%Y-%m-%d'
    ) date
from 
    any_table,    
    (select @num:=-1) num
limit 
    365

3 个答案:

答案 0 :(得分:0)

使用GROUP BY

SELECT 
    year(theDate), 
    month(theDate), 
    day(theDate), 
    count(*) 
FROM 
   test_table 
GROUP BY 
    year(theDate), 
    month(theDate), 
    day(theDate)

答案 1 :(得分:0)

在MySQL中,我只会这样做:

select date(t.datecol), count(*)
from any_table t
group by date(t.datecol);

如果您想要特定时间跨度的数据,请使用where子句:

select date(t.datecol), count(*)
from any_table t
where t.datecol >= '2011-01-01' and t.datecol < '2012-01-01'
group by date(t.datecol);

答案 2 :(得分:0)

您想要计算给定时间范围内的所有日期,包括那些不在表格中的日期(因此计数为0)。这有点头疼但不是前所未有的。您基本上需要创建一个实用程序表,它只是您可能想要的每个日期,然后对该表执行外部联接。因此,创建一个简单的表格,如:

CREATE TABLE `all_dates` (
  `the_date` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

并填写您认为可能需要的所有日期。我认为距今年10年的半径是好的。因此请填写2008-01-01和2028-12-31之间的每个日期。

INSERT INTO all_dates
(the_date) VALUES
('2008-01-01'),
('2008-01-02'),
('2008-01-03')

可能有一种聪明的方法可以在一个查询中使用一个程序生成所有行或者其他一些,但我不知道它会是什么,所以我个人只是创建一个简单的脚本(比如在PHP中)来生成那些行。

一旦all_dates表具有满足您需求的所有日期值行,您就可以进行查询以获取每个日期的计数(包括缺少日期),如:

SELECT DATE(all_dates.the_date), COUNT(any_table.datecol)
FROM any_table
RIGHT JOIN all_dates ON DATE(any_table.datecol) = all_dates.the_date
GROUP BY all_dates.the_date
HAVING all_dates.the_date BETWEEN '2011-01-01' AND '2012-01-01'