![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Распределение записей в таблице по часам в сутках [MySQL]
VictorT © (2004-09-10 14:15:00)Есть таблица, одним из полей которой является целое число (время в юникс-формате).
Нужно написать запрос, пока даже не знаю как подступиться к его написанию.
В результате он должен выдавать распределение кол-ва записей по часам, такого типа:
Час Кол-во
0 12
1 456
2 435
3 44
4 443
...
22 76
23 45
СУБД - MySQL
VictorT (2004-09-30 12:22:00) [1]Как говорится, не прошло и пол года. Вот оно, решение:
select hour(from_unixtime(secound)), count(*) from table group by 1
pasha_golub (2004-09-13 16:01:00) [2]VictorT © (10.09.04 16:50) [13]
Витя, зафигачь мне логин в сервак, я зайду и посмотрю. Или сделай дамп данных, я у себя на серваке попробую.
VictorT (2004-09-13 11:13:00) [3]Есть у кого-то ещё мысли?
VictorT (2004-09-10 16:50:00) [4]pasha_golub © (10.09.04 16:21) [12]
Ты какими данными тестовую таблицу заполнял?
У меня выдаёт в первом столбце числа большие 23-х
И кол-во больше больше 24-ч в результате.
Именно поэтому я добавил %24, но это тоже неправильно.
А вот такой запрос выдал инфу более похожую на правдивую, но тоже есть сомнения:
select ROUND(secound/60/60)%24, count(*) from table group by 1
pasha_golub (2004-09-10 16:21:00) [5]VictorT © (10.09.04 15:48) [11]
Витя, это по фигам. У меня тоже datetime (timestamp) и все прекрасно работает.
VictorT (2004-09-10 15:48:00) [6]Хм.. что-то не то я напоправлял. Д и твой запрос тоже не совсем правильный получается.
Из манулала:
HOUR(time)
Возвращает час для аргумента time в диапазоне от 0 до 23:
mysql> SELECT HOUR('10:05:03');
-> 10
А в моём случае аргумент не time, а datetime
VictorT (2004-09-10 15:10:00) [7]pasha_golub © (10.09.04 14:47) [5]
select HOUR(added), count(*) from <table_name> group by 1
Спасибо, немного подправил, и вроде как работает:
select HOUR(time)%24, count(*) from forum group by 1
pasha_golub (2004-09-10 14:52:00) [8]VictorT © (10.09.04 14:51) [8]
Витя, попробуй запрос из pasha_golub © [5] и не ... мозги. :)
VictorT (2004-09-10 14:51:00) [9]Блин, в смысле так:
select ROUND(secound/60/60)%24, count(*) from table group by 1
pasha_golub (2004-09-10 14:50:00) [10]VictorT © (10.09.04 14:49) [6]
Переводы часов что так, что так не учтуться ибо это мертвое время по определению.
Последний запрос работает. У себя проверил уже.
VictorT (2004-09-10 14:49:00) [11]pasha_golub © (10.09.04 14:42) [3]
ты наверно имел в виду что то типа
select ROUND(secound/60/60)/24, count(*) from table group by 1
Я думал так, но так ведь будут неучтены всякого рода переводы часов, високосные невисокосные года... или я что-то гоню? а то совсем уже торможу..
pasha_golub (2004-09-10 14:47:00) [12]select HOUR(added), count(*) from <table_name> group by 1
Added - имя поля у котором время.
pasha_golub (2004-09-10 14:43:00) [13]pasha_golub © (10.09.04 14:42) [3]
ээ-э-э, прогнал я.
pasha_golub (2004-09-10 14:42:00) [14]select secound*60*60, count(*) from table group by 1
VictorT (2004-09-10 14:30:00) [15]
> что такое "время в юникс-формате",
время, измеренное в секундах с начала Unix Epoch (January 1 1970 00:00:00 GMT).
>но не это ли часом нужно?
>
> select час, count(*) from table group by час
Что-то вроде этого, такой бы запрос был бы правильным для меня, если б в том поле хранился именно час суток, но там хранятся секунды.
Т.е. хранятся секунды, а погруппировать нужно по часам, да и не просто по часам, а по номеру часа в сутках.
Vlad (2004-09-10 14:21:00) [16]я правда не знаю, что такое "время в юникс-формате", но не это ли часом нужно?
select час, count(*) from table group by час