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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Составление запроса, Группировка таблицы 
V
    Опции темы
KAV2008
Дата 21.7.2009, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте помогите пожалуйста с запросом
Таблица  TAG - содержит часовые параметры
CREATE TABLE  TAG
(
  TAG_ID       INTEGER                          NOT NULL,    //идентификатор параметра
  VAL          FLOAT(126),                                               //значение
  REVISION     DATE                             NOT NULL )       //дата и время (по часам)

Необходимо сделать группировку следующего вида

                 REVISION_1  REVISION_2***REVISION_24
TAG_ID_1     val                val
TAG_ID_2    val                  val
TAG_ID_3    val                  val
,,,,
TAG_ID_N 

Или в перевернутом виде
значения в базу добавляються каждый час


PM MAIL   Вверх
KAV2008
Дата 21.7.2009, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Поясню таблицу в более наглядном виде


                                                                1:00           2:00          3:00
параметр 53 (наприм расход)                знач          знач          знач
параметр 54 (наприм температура)       знач          знач          знач

SELECT a1.tag_id, a1.val, a1.revision 
FROM tag a1 where (a1.REVISION BETWEEN TO_DATE('07/20/2009 08:00:00', 'MM/DD/YYYY HH24:MI:SS') 
AND TO_DATE('07/20/2009 20:00:00', 'MM/DD/YYYY HH24:MI:SS')) 

что добавить в запрос что бы сгруппировать данные, group by a1.revision - не помогает

Пожалуйста помогите 





PM MAIL   Вверх
Akina
Дата 21.7.2009, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Укажите СУБД.
Поддерживает ли она перекрёстные запросы?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 22.7.2009, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(KAV2008 @  21.7.2009,  12:24 Найти цитируемый пост)
Необходимо сделать группировку 

группировка подразумевает аггрегацию
Как вы собираетесь аггрегировать значения в группе?
Цитата(KAV2008 @  21.7.2009,  12:44 Найти цитируемый пост)
TO_DATE

я так понимаю оракля?
Код

  select TAG_ID 
         ,trunc(REVISION) day
         ,sum(decode(to_char(REVISION,'HH24'),'01',val) "1:00"
         ,sum(decode(to_char(REVISION,'HH24'),'02',val) "2:00"
         ,sum(decode(to_char(REVISION,'HH24'),'03',val) "3:00"
         .
         .
         .
         ,sum(decode(to_char(REVISION,'HH24'),'23',val) "23:00"
   from  TAG
   group by TAG_ID,trunc(REVISION)

Запрос возвратит суммы значений по часам в сутках на дату для каждого тэга.
Что вам нужно на самом деле - неведомо.


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


Шустрый
*


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

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



База данных Oracle 9
таблица в базе выглядит вот так

TAG_ID    VAL    REVISION
152    29    07.20.2009 08:00:00
153    1    07.20.2009 08:00:00
155    4    07.20.2009 08:00:00
154    5    07.20.2009 08:00:00
152    30    07.20.2009 09:00:00
153    1    07.20.2009 09:00:00
155    2    07.20.2009 09:00:00
154    3    07.20.2009 09:00:00
152    30    07.20.2009 10:00:00
153    1    07.20.2009 10:00:00
155    6    07.20.2009 10:00:00
154    7    07.20.2009 10:00:00
152    30    07.20.2009 11:00:00
153    1    07.20.2009 11:00:00
155    1    07.20.2009 11:00:00
154    1    07.20.2009 11:00:00

т.е по одному значению на каждый час


PM MAIL   Вверх
KAV2008
  Дата 23.7.2009, 06:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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




Огромное спасибо за помощь


Результат запроса следующий
TAG_ID    DAY                          1:00    2:00    3:00

152    08.03.2008 00:00:00    25    25    24
152    08.04.2008 00:00:00    22    21    21
152    08.05.2008 00:00:00    22    22    22
152    08.06.2008 00:00:00    25    24    24
152    08.07.2008 00:00:00    25    25    0
152    08.08.2008 00:00:00    25    25    24


PS в запросе не хватает правой скобки
 select TAG_ID 
         ,trunc(REVISION) day
         ,sum(decode(to_char(REVISION,'HH24'),'01',val)) "1:00"
         ,sum(decode(to_char(REVISION,'HH24'),'02',val)) "2:00"
         ,sum(decode(to_char(REVISION,'HH24'),'03',val)) "3:00"
         .
         .
         .
         ,sum(decode(to_char(REVISION,'HH24'),'23',val)) "23:00"
   from  TAG
   group by TAG_ID,trunc(REVISION)

С благодарностью smile

PM MAIL   Вверх
KAV2008
Дата 14.8.2009, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте 
Прошу Вашей помощи  по этой же теме вопроса 
запрос 
 тот же 

 select TAG_ID 
         ,trunc(REVISION) day
         , sum (val) sum                                                                    --добавлен  подсчет суммы за сутки 
         ,sum(decode(to_char(REVISION,'HH24'),'01',val)) "1:00"
         ,sum(decode(to_char(REVISION,'HH24'),'02',val)) "2:00"
         ,sum(decode(to_char(REVISION,'HH24'),'03',val)) "3:00"
         .
         .
         .
         ,sum(decode(to_char(REVISION,'HH24'),'23',val)) "23:00"
   from  TAG
   group by TAG_ID,trunc(REVISION)

Требуеться подсчитать не только сумму за сутки общую,
но сумму за определенные часы, например с 8 до 20
и 1 до 8 плюс с 21 до 24 , т.е. по сменам 
подскажите как дополнить запрос
С благодарностью
PM MAIL   Вверх
DimW
Дата 14.8.2009, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(KAV2008 @  14.8.2009,  12:20 Найти цитируемый пост)
подскажите как дополнить запрос

Код

select TAG_ID
      ,trunc(REVISION) day
      ,sum(val) sum --добавлен  подсчет суммы за сутки
      --
      ,sum(case when to_number(to_char(REVISION, 'HH24')) between 8 and 20 then val else 0 end) "с 8 до 20" --!
      ,sum(case when to_number(to_char(REVISION, 'HH24')) between 1 and 8 then val else 0 end) "с 1 до 8" --!
      --
      ,sum(decode(to_char(REVISION, 'HH24'), '01', val)) "1:00"
      ,sum(decode(to_char(REVISION, 'HH24'), '02', val)) "2:00"
      ,sum(decode(to_char(REVISION, 'HH24'), '03', val)) "3:00"
  from TAG
 group by TAG_ID
         ,trunc(REVISION)



PM MAIL ICQ   Вверх
KAV2008
Дата 14.8.2009, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Большое спасибо 
Вес работает!!! smile 
PM MAIL   Вверх
skyboy
Дата 15.8.2009, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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




M
skyboy
обсуждение проблемы "столбец определен неоднозначно" вынес в раздел "Delphi: Базы данных и репортинг".
Впредь попрошу не задавать несколько вопросов в одной теме. И не игнорировать кнопку "Код" для форматирования программного кода.

PM MAIL   Вверх
KAV2008
Дата 17.8.2009, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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


 




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


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

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