MySQL-запрос для подсчета строк, сгруппированных по диапазону дат

0

все. У меня есть таблица с столбцом даты, которая является либо нулевой, либо содержит дату события. Я пытаюсь подсчитать, сколько из этих дат попадает в заданный диапазон (например, сначала от месяца к последнему дню месяца), а затем группируется по этому диапазону (т.е. Группа за месяцем)

Если бы я сделал это в течение одного месяца, это выглядело бы так:

SELECT count(*)
FROM my_table
WHERE my_table.event_date > 1530403200 and my_table.event_date < 1530403200
/* 7/1/2018 to 7/31/2018 */

Так что мне очень нравится - это запрос, чтобы дать мне результаты, сгруппированные по месяцам, с подсчетом этих полных строк в течение каждого месяца, например:

:
6/1/2018 - 6/30/2018, 8650
7/1/2018 - 7/31/2018, 9180
:
etc.

Спасибо за любой совет.

Теги:

1 ответ

2

Вы можете использовать что-то вроде следующего:

SELECT
    MONTH(FROM_UNIXTIME(event_date)) AS month,
    MIN(FROM_UNIXTIME(event_date)) AS first_date,
    MAX(FROM_UNIXTIME(event_date)) AS last_date, 
    COUNT(*) AS cnt_dates
FROM my_table
WHERE FROM_UNIXTIME(my_table.event_date) > '2018-08-01' 
    AND FROM_UNIXTIME(my_table.event_date) < '2018-08-15' 
    AND NOT my_table.event_date IS NULL
GROUP BY MONTH(FROM_UNIXTIME(event_date))

demo: https://www.db-fiddle.com/f/nNVBtJgpKkiCcf7B9GPCEN/0

  • 0
    Потрясающие. Я неправильно вставил целые числа времени в своем первоначальном примере, который я ценю, что вы проделали это. Они должны были быть с 1530403200 по 1533081600. Во всяком случае, прекрасно работает. БЛАГОДАРЮ ВАС!
  • 0
    @Tom - да, проще использовать реальные даты (а не временные метки).

Ещё вопросы

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