|
MySQL.RU - Webboard
Вернуться
выборка даных за месяц в интервале времени (nitrofiller) 18/10/2008 - 19:17:04
Re: выборка даных за месяц в интервале времени (bac) 18/10/2008 - 20:26:17
Re: выборка даных за месяц в интервале времени (nitrofiller) 18/10/2008 - 22:29:00
Re: выборка даных за месяц в интервале времени (bac) 18/10/2008 - 23:17:54
Re: выборка даных за месяц в интервале времени (nitrofiller) 18/10/2008 - 23:38:11
> Original message text:
> From: nitrofiller - 18/10/2008 - 19:17:04
> Subject:выборка даных за месяц в интервале времени
> -----------------
> Приветствую!
>
> Имеется база данных с информацией по интернет трафику.
>
> Столбец - unix_secs содержит дату и имеет формат unixtime.
> C помощью функции FROM_UNIXTIME()
> получаю её в формате "YYYY-MM-DD hh:mm:ss"
> пример: '2008-08-15 17:57:11'
>
> также имеется столбец - DOCTETS - количество байт
> столбец SrcAddr и DstAddr - ip-адрес отправки и ip-адрес доставки соотвестственно.
>
> Задача.
> Посчитать количество байт за месяц,
> но только в интервале от 10:00 до 22:00 каждого дня месяца.
>
> пробовал делать такие запросы:
>
> SELECT ROUND(SUM(DOCTETS)/1024/1024,3) AS 'TOTAL [MBytes]'
> FROM stat_base
> WHERE SrcAddr='100.200.100.200'
> AND
> DATE_FORMAT(FROM_UNIXTIME(unix_secs),'%Y-%m') = '2008-08'
> AND
> DATE_FORMAT(FROM_UNIXTIME(unix_secs),'%h:%m:%s') >= '10:00:00'
> AND
> DATE_FORMAT(FROM_UNIXTIME(unix_secs),'%h:%m:%s') <='22:00:00';
>
> - - -
>
> SELECT ROUND(SUM(DOCTETS)/1024/1024,3) AS 'TOTAL [MBytes]'
> FROM stat_base
> WHERE SrcAddr='100.200.100.200' AND
> DATE_FORMAT(FROM_UNIXTIME(unix_secs),'%Y-%m %h:%m:%s')
> BETWEEN '2008-08 10:00:00' AND '2008-08 22:00:00';
>
> ---
> Итог этих запросов таков, что насчитывается лишнее.
> Причём прилично, вместо 354 мегабайт, аж 5140 мегабайт.
>
> Помогите пожалуйста составить правильный запрос.
>
From: nitrofiller - 18/10/2008 - 22:29:00
Subject:выборка даных за месяц в интервале времени
-----------------
при запросе который рекомендуете и который изначально использовал, ниже привожу его вид:
SELECT ROUND(SUM(DOCTETS)/1024/1024,3) AS 'TOTAL [MBytes]'
FROM stat_base
WHERE SrcAddr='100.200.100.200' AND
FROM_UNIXTIME(unix_secs) BETWEEN
'2008-08-01 10:00:00' AND '2008-08-31 21:59:59';
этот запрос мне выдаёт - 13433 мегабайт,
против ожидаемых 354 мегабайт, которые посчитаны вручную, делая запрос на каждый день и далее в Excel 2007 просуммировал.
Последовал совету(поставил вместо SUM *(звёздочку)),
и отгрузив всё в файл таким запросом:
SELECT * INTO OUTFILE "/tmp/aug08_10h_22h.txt"
FIELDS TERMINATED BY "|" FROM stat_base
WHERE SrcAddr='100.200.100.200'
AND
FROM_UNIXTIME(unix_secs) BETWEEN
'2008-08-01 10:00:00' AND '2008-08-31 21:59:59';
загрузил файл в Excel 2007 и просмотрел выборочно столбец(unix_secs) с датой, и честно говоря для меня осталось загадкой, почему там присутствую такие временные отрезки
"2008-08-03 02:39:23"
"2008-08-22 04:44:17" и т.п.,
которые вообще не должны быть в указанном интервале времени.
Запрос подрузамевает интервал с 10:00 до 22:00 каждого дня, а в итоге как-то появляется 2 часа ночи и 4 часа утра.
---
Два запроса, которые привёл в первом своём сообщении, ошибаются значительно меньше, но результат всёравно неверный.
Аналогично проверил свои два запроса, отгрузив информацию в файл и тоже получил часы, которые в моём интервале быть не должны.
-
Вообщем вопрос остаётся открытым... :(
Какой всё-таки надо составить запрос ?
-
Вручную то считается интервал верно(тоже проверил в Excel 2007), запросом на каждый день от 1 числа до 31-го августа месяца:
SELECT ROUND(SUM(DOCTETS)/1024/1024,3) AS 'TOTAL [MBytes]'
FROM stat_base
WHERE SrcAddr='100.200.100.200'
AND
FROM_UNIXTIME(unix_secs)
BETWEEN '2008-08-01 10:00:00' AND '2008-08-01 22:00:00';
---
P.S.
Server version: mysql-server-5.0.37
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
34308
|
|