Как посчитать одинаковые значения даты в день

0

Я полон новичок, но даже не знаю, какого типа этот запрос.

КСТАТИ. Я хочу получить значения 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
    Я понятия не имею, что вы просите здесь. Возможно, вы могли бы привести пример входных данных и ожидаемого выхода
  • 0
    Вы можете отредактировать свой вопрос выше и использовать уценку для форматирования кода и данных. Смотрите stackoverflow.com/editing-help
Показать ещё 2 комментария
Теги:
datetime
date
count

3 ответа

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 таблица 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'
  • 0
    Да, это именно то, что я имею в виду. Спасибо, мыч, за это. Но, как вы сказали, я не хочу создавать новую таблицу all_dates.
  • 0
    Тогда вам не повезло. Таблица all_dates дешевая. Это немного глупо, но это то, что вам нужно для достижения своей цели. Поверьте, я столкнулся с этой самой дилеммой 10 лет назад, и это было решением тогда и сейчас.
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);
  • 0
    но у стали нет дней, которых нет на столе.
  • 0
    Дней, которых нет в таблице, было бы 0. Значительно легче не беспокоиться о них, чем создать таблицу объединения утилит для заполнения этих пробелов 0.
0

Используйте GROUP BY:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню