2015-02-16 2 views
0

Перейти к построению линейного графика. Я хочу запросить счет с разницей в 5 дней. Предположим, если у меня есть следующие строки:Mysql Query для подсчета строк с разницей в конкретных днях

booking_date 
2015-02-1 
2015-02-3 
2015-02-5 
2015-02-6 
2015-02-6 
2015-02-9 
2015-02-10 
2015-02-15 
2015-02-17 
2015-02-23 
2015-02-28 

В столбце таблицы выше она содержит дату. Теперь Как я могу сделать запрос MySQL, так что он может вернуться с разницей в 5 дней, как:

1 => 3 // count of date between 2015-02-1 & 2015-02-05 is 3 
2 => 4 // count of date between 2015-02-06 & 2015-02-10 is 4 
3 => 1 // count of date between 2015-02-11 & 2015-02-15 is 1 
4 => 1 // count of date between 2015-02-16 & 2015-02-20 is 1 
5 => 1 // count of date between 2015-02-21 & 2015-02-25 is 1 
6 => 1 // count of date between 2015-02-26 & 2015-02-30 is 1 

ли какой-либо прямой способ запроса, как и выше. Я не очень хорошо разбираюсь в mysql. Но может сделать php красиво.

+0

вы можете использовать решение, которое почти идентично тому, как вы задали вопрос – Strawberry

ответ

0

Вы можете сделать следующее, чтобы получить все в одном запросе.

Прежде всего получите отметку времени unix для даты, которую вы хотите начать группировать за 5 дней. В вашем примере это будет 2015-02-01 -> 1422748800

Тогда запрос будет следующим:

SELECT COUNT(*), FLOOR((UNIX_TIMESTAMP(booking_date) - 1422748800)/ (60*60*24*5)) as FiveDayPackNumber from tbl GROUP BY FLOOR((UNIX_TIMESTAMP(booking_date) - 1422748800)/ (60*60*24*5)) 

не проверял, так что может потребоваться некоторые настройки, но вы можете получить представление : Он будет группировать их по количеству 5-дневных пакетов, которые были отправлены с вашей начальной даты, начиная с 0.

+0

Привет, я устал это, но получило неожиданный результат. Есть 3 счета от 2015-2-0 до 2015-2-5, но он показывает 4 счета. Почему это происходит. –

+0

Предоставьте свой пример и данные в sqlfiddle и давайте выясним – Pinx0

0

Вы имеете в виду что-то вроде:

SELECT COUNT(1) FROM {table_name} WHERE booking_date > 2015-02-01 AND booking_date < 2015-02-05 

?

(полностью от памяти, так что вы, возможно, потребуется немного изменить его)

0
SELECT count(*) 
FROM tbl 
WHERE booking_date >= start_date 
    AND booking_date <= end_date 
Смежные вопросы