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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Среднее значение подвыборки, sqlсервер2000 
:(
    Опции темы
Гость_Unregistered
Дата 25.1.2005, 10:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











здравствуйте. никак не получается сделать такой запрос:
есть таблица. в ней хранятся ежесекундные данные по различным параметрам.
Поля:
ITEM_ID,TIMEPOINT,S1,S2,...S20

Нужно выбрать усредненные значения одного из параметров по получасовкам за указанный период. Например, задано: S1 c 25.01.05 0:00:00 по 27.01.05 0:00:00, получить

25.01.05 0:00:00.....25.01.05 0:30:00.....avg(S1)
25.01.05 0:30:00.....25.01.05 1:00:00.....avg(S1)
25.01.05 1:00:00.....25.01.05 1:30:00.....avg(S1)
и т.д.

надеюсь понятно объяснил.
Проблема в том, что я не знаю как сгруппировать данные по получасовкам. А может тут вообще другой подход нужен.
Заранее спасибо за совет.



  Вверх
boevik
Дата 25.1.2005, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

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



Для начало, неплохо бы привести время к нужному виду, т.е. получасовкам.
Примерно так:
Код

SELECT cast(left(convert(smalldatetime , TIMEPOINT, 101),15)+(case when datepart(minute,TIMEPOINT)<30 then '00:00' else '30:00' end) as smalldatetime), S1, S2 ...
FROM table1


А теперь можно запустить простой aggregation sql для получения средних результатов.

Удачи


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Гость_Unregistered
Дата 25.1.2005, 16:19 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











спасибо. попробую. именно с -нужным видом- у меня и возникли проблемы. т.е. теперь я могу сделать из приведенного тобой селект-а еще один с применением avg(S1) и GROUP BY TIMEPOINT? поясни пожалуйста, а то я пока еще тяжело воспринимаю логику sql-скрипта smile (не приходилось плотно работать).
  Вверх
boevik
Дата 25.1.2005, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

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



Можно с использованием во временную таблицу:
Код

SELECT cast(left(convert(smalldatetime , TIMEPOINT, 101),15)+(case when datepart(minute,TIMEPOINT)<30 then '00:00' else '30:00' end) as smalldatetime) as TIMEPOINT, S1, S2 ...
INTO #t
FROM table1

SELECT TIMEPOINT, avg(S1), avg(S2), ...
FROM #t
GROUP BY TIMEPOINT


Или на прямую с select из подзапроса (кажется так тоже можно):
Код

SELECT TIMEPOINT, avg(S1), avg(S2), ...
FROM (
SELECT cast(left(convert(smalldatetime , TIMEPOINT, 101),15)+(case when datepart(minute,TIMEPOINT)<30 then '00:00' else '30:00' end) as smalldatetime) as TIMEPOINT, S1, S2 ...
INTO #t
FROM table1)
GROUP BY TIMEPOINT





--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Гость_Unregistered
Дата 26.1.2005, 04:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо. Твой подход работает. Правда немного переработали твой пример. формат времени был выбран не верно и группировка проходила некорректно (12/24 часа).
вот что у нас получилось:

Код

select left(convert(VARCHAR,timepoint,120),14)+(case when datepart(minute,TIMEPOINT)<30 then '00:00' else '30:00' end) as timepoint,S1
INTO #t
FROM tablel
WHERE (TIMEPOINT>=CONVERT(DATETIME,'2005-01-20 0:00:00',102) AND TIMEPOINT<CONVERT(DATETIME,'2005-01-20 23:59:59',102))

SELECT (CONVERT(DATETIME,TIMEPOINT,102)) AS TIMEPOINT, avg(S1)
FROM #t
GROUP BY TIMEPOINT
ORDER BY TIMEPOINT




  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




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


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

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