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