Я полон новичок, но даже не знаю, какого типа этот запрос.
КСТАТИ. Я хочу получить значения 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
Вы хотите подсчет всех дат за определенный период времени, включая те даты, которые не указаны в таблице (и, следовательно, имели бы счет 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
таблица 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'
В 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);
Используйте GROUP BY
:
SELECT
year(theDate),
month(theDate),
day(theDate),
count(*)
FROM
test_table
GROUP BY
year(theDate),
month(theDate),
day(theDate)