Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




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, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
34308



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |