2014-09-01 3 views
0

Я пытаюсь сделать sql, который извлекает начальное время и количество строк после группировки по сегментам времени. Я уже проверил, что на StackOverflow и я могу достигнуть того делаетГруппа MySQL по времени

GROUP BY UNIX_TIMESTAMP(time_stamp) DIV 30 

Проблема заключается в том, что мне это нужно, чтобы начать с определенного времени (оно может или не существует между рядами) и даже (если possible-- не требуется мысли) добавить время с 0 подсчитанных элементов, а также.

Например, имея таблицу с этой строкой:

+---------------------+-----------------+ 
| time_stamp   | id    | 
+---------------------+-----------------+ 
| 2010-06-15 23:00:04 |    1 | 
| 2010-06-15 23:00:30 |    2 | 
| 2010-06-15 23:01:30 |    3 | 
| 2010-06-15 23:03:30 |    4 | 
| 2010-06-15 23:04:30 |    5 | 
| 2010-06-15 23:06:10 |    6 | 
| 2010-06-15 23:06:20 |    7 | 
| 2010-06-15 23:06:30 |    8 | 
| 2010-06-15 23:06:30 |    9 | 
| 2010-06-15 23:06:35 |    10 | 
+---------------------+-----------------+ 

и, начиная с 2010-06-15 23:00:00 за каждую минуту (DIV 60), я хотел бы иметь следующий вывод :

+---------------------+-----------------+ 
| time_stamp   | count(id)  | 
+---------------------+-----------------+ 
| 2010-06-15 23:00:00 |    2 | 
| 2010-06-15 23:01:00 |    1 | 
| 2010-06-15 23:02:00 |    0 | 
| 2010-06-15 23:03:00 |    1 | 
| 2010-06-15 23:04:00 |    1 | 
| 2010-06-15 23:05:00 |    0 | 
| 2010-06-15 23:06:00 |    5 | 
+---------------------+-----------------+ 

. Было бы здорово даже без count = 0 случаев.

Also..adding каждую метку времени, а затем удаление это не решение ..

Это фиктивный ДАННЫЕ, я не хочу делить только на минуты, но параметром в PHP

Правильный ответ можно найти here, но я мог только найти, что по почте отмечен как принято.

+0

Что значит параметр? –

+0

это будет запрос в php-функции –

+0

возможный дубликат [Группировка MySQL datetime в интервалы независимо от часового пояса] (http://stackoverflow.com/questions/11789818/grouping-mysql-datetime-into-intervals-irrespective-of -timezone) –

ответ

1

все, что вы хотите сделать, это GROUP BY, а затем использовать функцию времени .. в этом случае МИНУТУ должны делать то, что вы хотите

SELECT COUNT(*) FROM table 
GROUP BY MINUTE(time_stamp) 

EDIT:

после вопроса правок я считаю этот запрос будет ближе к тому, что вы хотите сделать.

SELECT 
    FROM_UNIXTIME 
    ( FLOOR(UNIX_TIMESTAMP(`time_stamp`)/your_var 
      )* your_var 
) AS timesliced, 
    COUNT(*) AS mycount 
FROM tablename 
WHERE time_stamp >= '2010-06-15 23:01:45' 
GROUP BY timesliced 
+0

** отредактировано ** Я не хочу делиться только на минуты, но по параметру, и начиная с CERTAINE date like 2010-06-15 23:01:45 –

+0

вам нужно уточнить подробнее .. что вы имеете в виду параметр? Я могу ограничить результаты тем, что дата начинается с этой определенной даты .. но как иначе вы разделите ее, если не на несколько минут? вот что показывают ожидаемые результаты. –

+0

Например, за каждые X секунд, где X будет в качестве входа от php-функции –

Смежные вопросы