Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Группировка по datetime
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Группировка по datetime

Страниц (1): [1]
 

1. Грачи прилетели - 29 Сентября, 2016 - 11:10:32 - перейти к сообщению
Добрый день!

Есть два поля

id int(11) AUTO_INCREMENT
sozdana (datetime)

Запросом

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT COUNT(`id`) AS ids, `sozdana` FROM `rr_kr` GROUP BY `sozdana`


я получаю кол-во записей по каждому моменту времени, а мне необходимо сделать группировку по интервалу по часам
Что-то типа
Интервал Кол-во
00:00-01:00 20
01:00-02:00 30
02:00-03:00 40

Это реально одним запросом сделать?

Спасибо
(Добавление)
Что-то типа
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT COUNT(`id`) AS ids, DATE_FORMAT(sozdana,'%y%m%d%H') AS num_hour
  2. FROM 'rr_kr'  
  3.  
  4. GROUP BY DATE_FORMAT(sozdana,'%y%m%d%H')


но дает ошибку. Пока ищу варианты, если кто-то в теме подскажет, буду признателен
2. Мелкий - 29 Сентября, 2016 - 11:27:14 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT hour(created_at) AS created_hour, count(0) FROM tablename GROUP BY created_hour

За весь период, например для статистики, в какой час добавляется больше записей.

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT date(created_at) AS created_date, hour(created_at) AS created_hour, count(0) FROM tablename GROUP BY created_date, created_hour

Либо (мог напутать местами аргументы date_format)
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT date_format('%Y-%m-%d %H', created_at) AS created_date, count(0) FROM tablename GROUP BY created_date

Агрегация раздельно по дням.
3. Грачи прилетели - 29 Сентября, 2016 - 11:33:39 - перейти к сообщению
Спасибо!

Попробовал
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT
  2.   COUNT(id) AS ids,
  3.   DATE_FORMAT('%Y-%m-%d %H',  sozdana) AS created_date
  4. FROM
  5.   rr_kr
  6. GROUP BY
  7.   created_date


запрос выполняется, но нет группировки по дням
выводит
ids created_date
1336 NULL
4. Мелкий - 29 Сентября, 2016 - 11:58:18 - перейти к сообщению
https://dev[dot]mysql[dot]com/doc/refman[dot][dot][dot]tion_date-format
Ну да, перепутал порядок.
5. Грачи прилетели - 29 Сентября, 2016 - 22:23:36 - перейти к сообщению
А если усложнить задачу и в запросе

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT date(`sozdana`) AS created_date, hour(`sozdana`) AS created_hour, count(0) FROM rr_kr GROUP BY created_date, created_hour  
  2. ORDER BY count(0)  DESC


надо вывести только максимальные значения по каждому часу? т.е. не показывать все дни, а только часы и максимальное кол-во в этот час ?
Реально запросом?
6. Мелкий - 29 Сентября, 2016 - 23:00:04 - перейти к сообщению
Запросто. Понять бы только, что именно нужно. И не ответил ли я уже на этот вопрос чуть ранее.
Может, завтра пойму.
7. Грачи прилетели - 29 Сентября, 2016 - 23:12:10 - перейти к сообщению
Мелкий пишет:
Запросто. Понять бы только, что именно нужно. И не ответил ли я уже на этот вопрос чуть ранее.
Может, завтра пойму.


Вы мне помогли сегодня, но не могу плюсануть спасибо функционалом форума, т.к. мало сообщений на форуме.

Что касается запроса, то видимо это , в моем понимании, что-то близкое с MAX COUNT(`id`) и без GROUP BY created_date
только GROUP BY created_hour
но пока не получается составить запрос

Спасибо! Улыбка

 

Powered by ExBB FM 1.0 RC1