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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужен более короткий запрос, в Access Query 
V
    Опции темы
awelscriss
Дата 24.2.2008, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем жителям винограда - Привет!
   Прошу помочь настроить SQL запрос в Ассеss не используя VBA
   Я уже сделал несколько работающих вариантов а вопроса задаю потому, 
   что все они, либо сверх громоздки либо состоят из запрос к запросу к запросу к таблице.
   Видимо какието хитрости запросов ещё не освоил

У меня есть таблица в которую я заношу показания электросчётчика
Таблица     Колонка         Тип          Описание            Вариант
[счетчик]     [id]        {AutoInc}
[счетчик]     [dat]     {Short Date}        дата            10.02.2008
[счетчик]     [hrs]     {Long Integer}    время           12 или 0 (в основном)
[счетчик]     [cnt]     {Long Integer}    показание    167856

для удобства ввода не стал объединять дату и врема в одну колонку
в результирующей таблице нужно видеть следующее:
Таблица     Колонка         Тип           Описание                          Вариант
[res]      [id]                 {AutoInc}
[res]      [период]        {Gen Date}    дата и время                 10.02.2008 12:00
[res]      [период]        {Text}           "ночь" или "день"            ночь
[res]      [киловат]       {Number}     (показание - (показание через 12 часов))

как это сделать?
PM MAIL   Вверх
awelscriss
Дата 24.2.2008, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот один из громоздких вариантов

Код

SELECT Format(DateAdd("h",test.hh1,test.dd1),"hh:nn dd.mm.yyyy") as den, test.pot, test.per
FROM [
          SELECT счетчик.dat AS dd1,счетчик.cnt AS cnt1, счетчик.hrs AS hh1, 
                       isNull (  select distinct ff.dat from счетчик as ff 
                                        where ff.hrs=0 and DateDiff("d",счетчик.dat,ff.dat)=1) AS dd2, 
                       ( select distinct ff.cnt from счетчик as ff 
                              where ff.hrs=0 and DateDiff("d",счетчик.dat,ff.dat)=1) AS cnt2, 
                       round((cnt2-cnt1)*100/12) AS pot,"с 12 до 24" as per
          FROM счетчик WHERE счетчик.hrs=12
          UNION ALL 
          SELECT счетчик.dat AS dd1, счетчик.cnt AS cnt1,счетчик.hrs AS hh1, 
                       isNull ( select distinct ff.dat from счетчик as ff 
                                     where ff.hrs=12 and DateDiff("d",счетчик.dat,ff.dat)=0) AS dd2, 
                       ( select distinct ff.cnt from счетчик as ff 
                             where ff.hrs=12 and DateDiff("d",счетчик.dat,ff.dat)=0) AS cnt2, 
                       round((cnt2-cnt1)*100/12) AS pot,"с 0 до 12" as per
          FROM счетчик WHERE счетчик.hrs=0
          ]. AS test
WHERE ((Not (test.dd2) Is Null))
Order by 1 ;

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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

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



Я ба такой расчет делал бы программно... Что-то оптимизировав через запрос...

Это сообщение отредактировал(а) bopoha - 24.2.2008, 13:29
PM MAIL WWW ICQ Skype GTalk   Вверх
awelscriss
Дата 24.2.2008, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вопрос именно в использовании средств SQL из самой SQL

я предполагал что както Group By и Having смогут решить эту задачу
вот только как их здесь применить незнаю
PM MAIL   Вверх
Akina
Дата 24.2.2008, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Я так и не понял, чего тут ваяется... но если я понимаю правильно, то нужно в запросе получить изменение в поле счетчика через 12 часов, верно?
Если да, то как раз твое доморощенное "удобство" (отделение даты от времени) порождает тебе проблему, а без этого "удобства" все должно стать легким, простым и приятным.

PS. Не засовывай все в один запрос, делай поэтапно, это должна быть цепочка из трех (возможно четырех) запросов. Которая, кстати, работает в разы (и чем больше записей в таблице, тем больше разов) быстрее объединенного запроса.


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

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


Новичок



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

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



спасибо за что подключение к интересующему меня вопросу
поскольку все ответы сводятся к ложному стремлению добиться излишней простоты 
буду считать что ответ я получил и снимаю вопрос
спасибо!http://forum.vingrad.ru/html/emoticons/pack/yes3.gif
PM MAIL   Вверх
Akina
Дата 26.2.2008, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(awelscriss @  25.2.2008,  02:27 Найти цитируемый пост)
поскольку все ответы сводятся к ложному стремлению добиться излишней простоты 

Бритвы Оккама никто не отменял. И не зря...


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

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

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

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


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

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


 




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


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

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