Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Среднее значение каждых n-сторок 
:(
    Опции темы
bernex
Дата 5.9.2010, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 19.9.2007

Репутация: нет
Всего: нет



Есть таблица MySQL:
Код

ID <int>
TYPE <int>
DATE <timestamp>
VALUE <int>


Каждую секунду кидаются значения.
В одной такой таблице 20 миллионов записей.

Задача:
Выбрать набор значений одного типа (TYPE = 1), с усредненными значениями за час или минуту. Также в строке должен остаться DATE для определения минуты или часа?

Прошу помочь... спасибо...


Это сообщение отредактировал(а) bernex - 5.9.2010, 16:02
PM   Вверх
Anark1
Дата 5.9.2010, 20:13 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: нет
Всего: 11



Можно, например написать функцию извлекающую из DATE часы или минуты, то есть HOUR(DATE) или MIN(DATE),
соответствующие запросы:

Код

SELECT Sum(VALUE)/COUNT(*) AS Frequency, HOUR(DATE) AS Hours FROM MyTable WHERE TYPE=1 GROUP BY HOUR(DATE)

SELECT Sum(VALUE)/COUNT(*) AS Frequency, MIN(DATE) AS Mins FROM MyTable WHERE TYPE=1 GROUP BY MIN(DATE)


Придумал навскидку, не проверял, но идея такова.

Это сообщение отредактировал(а) Anark1 - 5.9.2010, 20:20


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
bernex
Дата 5.9.2010, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 19.9.2007

Репутация: нет
Всего: нет



data там int в ввиде цифры timestamp в формате int
будет работать HOUR?
PM   Вверх
Zloxa
Дата 5.9.2010, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Anark1 @  5.9.2010,  20:13 Найти цитируемый пост)
Sum(VALUE)/COUNT(*)

rtfm AVG
Цитата(Anark1 @  5.9.2010,  20:13 Найти цитируемый пост)
GROUP BY HOUR(DATE)

одинаковые часы разных суток схлопнутся в одну группу - ничо так?

Это сообщение отредактировал(а) Zloxa - 5.9.2010, 20:45


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Anark1
Дата 5.9.2010, 22:06 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: нет
Всего: 11



Цитата(Zloxa @  5.9.2010,  20:45 Найти цитируемый пост)
одинаковые часы разных суток схлопнутся в одну группу - ничо так?


Цитата(Anark1 @  5.9.2010,  20:13 Найти цитируемый пост)
Придумал навскидку, не проверял, но идея такова.


Добавить функцию DAY и делать группировку по двум значениям или придумать что-нибудь более изощренное, то что выполняло бы нужную группировку. У меня нет под рукой mysql, но можно попробовать что-нибудь вроде:

Код

SELECT Sum(VALUE)/COUNT(*) AS Frequency, EXTRACT(YEAR_MONTH_DAY_HOUR FROM CAST(DATE AS DATETIME)) AS UniqDate FROM MyTable WHERE TYPE=1 GROUP BY  EXTRACT(YEAR_MONTH_DAY_HOUR FROM CAST(DATE AS DATETIME))


CAST(TIMESTAMP AS DATETIME) работает нормально на MS SQL, наверное на mysql тоже.
Вообще тут полно функций по работе с датой и временем.

http://dev.mysql.com/doc/refman/5.1/en/dat...unction_extract

Цитата(bernex @  5.9.2010,  20:35 Найти цитируемый пост)
data там int в ввиде цифры timestamp в формате int
будет работать HOUR? 


Нужно определить функцию HOUR. Такое решение подразумевает определение UDF. Читайте про user-defined functions. Или см. выше.

P.S. Кстати, по поводу AVERAGE... так может быть автор хотя бы поймет о чем речь. ;)

Это сообщение отредактировал(а) Anark1 - 5.9.2010, 22:30


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
Zloxa
Дата 5.9.2010, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



оп... проглядел.
Цитата(Anark1 @  5.9.2010,  20:13 Найти цитируемый пост)
GROUP BY MIN(DATE)

 smile 

Цитата(Anark1 @  5.9.2010,  22:06 Найти цитируемый пост)
CAST(TIMESTAMP AS DATETIME) работает нормально на MS SQL

ничетак, что timestamp в MS Sql и в MySQL суть разные вещи и в MS таймстамп в дату кастовать - абсурд?

Цитата(Anark1 @  5.9.2010,  22:06 Найти цитируемый пост)
Нужно определить функцию HOUR. Такое решение подразумевает определение UDF. Читайте про user-defined functions 

Ты ведь сам привел ссылку с фунциями даты, не ужели не удосужился сам ее и прочитать. Тогда, быть может ты понял бы о чем толкует ТС.

Anark1, дружище, ты вот если сам не в теме, других с понтолыку не сбивай пожалуйста. 



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Anark1
Дата 5.9.2010, 23:12 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: нет
Всего: 11



Zloxa,
если у человека возникают такие вопросы когда он работает с timestamp с базой mysql, не знает функций и не знает как составить структуру запроса (иначе он, наверное, формулировал бы вопрос по-другому), то по-моему нет ничего плохого в моем желании ему помочь. Накидал человеку идей, ссылок, у него есть возможность почитать и разобраться. 
Кстати, спасибо за замечания, сам учту это, хоть наверное и не скоро придется что-нибудь делать с mysql.

Цитата(Zloxa @  5.9.2010,  22:58 Найти цитируемый пост)
MS таймстамп в дату кастовать - абсурд?

Буду рад прочитать пояснение.

Да и есть такой момент, что ты сам пока что ничего не предложил для автора. Или это у тебя такой стиль комментариев? Недаром же столько в "Флейме" набил  smile 
И манера общения интересная, способ самовыражения что-ли?  smile 

P.S.
Не забудь поставить "-3" этому моему посту  smile честное слово, всегда умиляли такие интернет-вояки.

Это сообщение отредактировал(а) Anark1 - 5.9.2010, 23:13


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
Zloxa
Дата 5.9.2010, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Anark1 @  5.9.2010,  23:12 Найти цитируемый пост)
ты сам пока что ничего не предложил для автора

У меня не хватает компетенций помочь автору. Потому и молчу.
Однако у меня хватает компетенций понять что ты, как и я не в теме. И вижу что тебя не гнушает выдавать за цимес отрыжку так и не переваренного тобой продукта. Я не могу оценить способен ли ТС самостоятельно определить качество твоих советов, потому помогаю ему, комментируя и оценивая твои посты. 
Цитата(Anark1 @  5.9.2010,  23:12 Найти цитируемый пост)
Буду рад прочитать пояснение.

да да, обязательно почитай в MSDN про timestamp. Или мне потрудиться тебе сцылочку подогнать?


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
djamshud
Дата 6.9.2010, 12:15 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: нет
Всего: 39



бррр, неправильно понял ТС.

Это сообщение отредактировал(а) djamshud - 6.9.2010, 12:17


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Zloxa
Дата 6.9.2010, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



djamshud, ему надо сгруппироваться с гранулярностью по часу или минуты и посчитать среднее.

если бы вместо таймстампа было бы просто целое число, обозначающее количество секунд с начала чего та это было бы чтото вроде:
Код

select trunc(date/60/*/60*/) date, avg(value) from table where type = 1 group by trunc(date/60/*/60*/)

но я не знаю можно ли так работать с таймстампом.

Еще как вариант - привести к строке по формату вроде 'DDMMYYYYHHMM' и группироваться по нему.

Но что есть реальное тру - я хз. Функции работы с датами в разных диалектах столь специфичны.....

Это сообщение отредактировал(а) Zloxa - 6.9.2010, 12:37


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Anark1
Дата 6.9.2010, 14:30 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: нет
Всего: 11



Zloxa, товарищ, да ты тот еще шутник  smile. Может быть тебе стоит ник поменять на "оценивающий чужие комментарии", ладно или хотя бы подпись?
Начнем с того, что я нигде не писал, что варианты, которые я предлагаю гарантированно будут работать, ладно ты такой классный утер мне нос, но сам ты ничем не лучше. Хотя бы даже процитирую тебя 
Цитата(Zloxa @  6.9.2010,  12:32 Найти цитируемый пост)
если бы


Цитата(Zloxa @  6.9.2010,  12:32 Найти цитируемый пост)
чего та это было бы чтото вроде


Цитата(Zloxa @  6.9.2010,  12:32 Найти цитируемый пост)
но я не знаю


Цитата(Zloxa @  6.9.2010,  12:32 Найти цитируемый пост)
Еще как вариант


Цитата(Zloxa @  6.9.2010,  12:32 Найти цитируемый пост)
Но что есть реальное тру - я хз


следуя твоей же логике, на кой черт писать тогда то что ты обозначил в предыдущем посте, какие-то варианты? Не знаешь - не пиши. Как насчет создать тему во "Флейме" и повоевать сам с собой? Тебе этого, похоже, не хватает.
По поводу timestamp,  я тогда не поленился, создал табличку с полем timestamp, забил ее данными, посмотрел CAST. Даты разумеется вышли абсолютно левые, но даже в таком виде это работало (получался нужный вид и не было ошибок), почему бы автору в таком случае не попробовать этот вариант на mysql? 

Я еще чисто ради интереса просмотрел одним глазом некоторые темы, в которых ты поучаствовал  smile уверен на 88%, что у тебя какие-то личностные проблемы самовыражения, впрочем это не мое дело. Я могу только тебе сочувствовать - резко критично, агрессивно настроенных индивидов никто нигде не любит.

А перлы вроде 

Цитата(Zloxa @  5.9.2010,  23:34 Найти цитируемый пост)
 выдавать за цимес отрыжку так и не переваренного тобой продукта


заставляют долго и с улыбкой вспоминать об этом. Удачи тебе  smile 



--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
Zloxa
Дата 6.9.2010, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Anark1 @  6.9.2010,  14:30 Найти цитируемый пост)
Удачи тебе

Спасибо!


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
djamshud
Дата 6.9.2010, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: нет
Всего: 39



Zloxa,

>если бы вместо таймстампа было бы просто целое число, обозначающее количество секунд с начала чего та это было бы чтото вроде:

UNIX_TIMESTAMP(timestamp) дает timestamp в православном отсчете секунд с 1970-го года. Я когда-то воротил софтинку, которая делала в том числе и такие выборки. Сейчас найду и попробую раскурить ее конфиги.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
djamshud
Дата 7.9.2010, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: нет
Всего: 39



Блин, фэйл. Нашел тот конфиг, в комментарии к нему прочитал, что пытался написать правильный запрос, но гугл предлагал креативы с подфункциями и джоинами - я не понял, как это, и в том же конфиге зафигачил процедурку group_by_interval, которая и занималась агрегацией по временным интервалам, благо записей было всего несколько десятков тысяч. В итоге каша выглядела так:

Код

...
data_src=$(db ${driver} select ... | $(group_by_interval day))
...


Так что я присоединяюсь к вопросу ТС, мне тоже интересно, как это сделать правильно.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
bernex
Дата 7.9.2010, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 19.9.2007

Репутация: нет
Всего: нет



Сорри всем, табличка все же постгрес.... 

Код

SELECT to_char(tstamp, 'YYYY-MM-DD HH24:MI') || ':00' as sss,  avg(value)  FROM "log".parms WHERE id = 372 GROUP BY to_char(tstamp, 'YYYY-MM-DD HH24:MI') LIMIT 10;


Это сообщение отредактировал(а) bernex - 7.9.2010, 20:25
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0569 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.