Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2014, 05:32   #1
fobass
Форумчанин
 
Регистрация: 05.06.2008
Сообщений: 100
По умолчанию Часовой расход

Доброе время суток

Есть таблица
fider1
Код:
keytime datetime
p real,
q real,
tok real,
cos real
в которую за один час записывается не менее 237 строк.

Мне нужно составить запрос, расход активной мощи (p) и реактивной (q) за один час

Делаю
Код:
SELECT SUM(p/60),SUM(q/60) FROM fider1 
WHERE keytime<=CURRENT_TIMESTAMP AND keytime >=DATEADD(hour,-1,CURRENT_TIMESTAMP)
Данный запрос выполняется каждый час

Правильна ли я запрашиваю расход за час?
fobass вне форума Ответить с цитированием
Старый 16.01.2014, 08:18   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

так а в результате то что получаете?
eval вне форума Ответить с цитированием
Старый 16.01.2014, 08:39   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я не очень понял вопрос (что Вы хотите уточнить, правильные ли формулы используете или правильно ли берёте разницу во времени за один час), но хотел бы дать совет по оптимазиции:
выносите деление за агрегатную функцию:
Код:
SELECT SUM(p)/60 as phour, SUM(q)/60 as qhour
а почему Вы делите на 60? У Вас в таблице строго поминутные значения? Тогда почему за час их именно 237 ?

посмотрите, что даст выборка вида:
Код:
SELECT SUM(p), COUNT(*) as Kolichestvo FROM fider1 
WHERE keytime<=CURRENT_TIMESTAMP AND keytime >=DATEADD(hour,-1,CURRENT_TIMESTAMP)
я бы именно на это количество и делил!
впрочем, утверждать не буду, это зависит от того, какие данные в таблице fider1 и как именно они хранятся...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.01.2014, 05:35   #4
fobass
Форумчанин
 
Регистрация: 05.06.2008
Сообщений: 100
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
я не очень понял вопрос (что Вы хотите уточнить, правильные ли формулы используете или правильно ли берёте разницу во времени за один час), но хотел бы дать совет по оптимазиции:
выносите деление за агрегатную функцию:
Код:
SELECT SUM(p)/60 as phour, SUM(q)/60 as qhour
а почему Вы делите на 60? У Вас в таблице строго поминутные значения? Тогда почему за час их именно 237 ?

посмотрите, что даст выборка вида:
Код:
SELECT SUM(p), COUNT(*) as Kolichestvo FROM fider1 
WHERE keytime<=CURRENT_TIMESTAMP AND keytime >=DATEADD(hour,-1,CURRENT_TIMESTAMP)
я бы именно на это количество и делил!
впрочем, утверждать не буду, это зависит от того, какие данные в таблице fider1 и как именно они хранятся...
Я бы хотел уточнить формулу.
В таблицу fider по таймеру записывается 2 строчки в минуту (я изменил интервал записи 33-сек) и получается за час 109 строк. Тогда
потребленная электроэнергия за один час это и есть
Код:
SELECT sum(p)/count(*) as P, sum(q)/count(*) as Q FROM fider6 ketime<='01.18.2014 01:00:00' and keytime>='01.18.2014 02:00:00'
или я неправильно запрашиваю.

Результат запроса получается на много выше допустимого.
fobass вне форума Ответить с цитированием
Старый 20.01.2014, 08:12   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
SELECT sum(p)/count(*) as P, sum(q)/count(*) as Q FROM fider6 ketime<='01.18.2014 01:00:00' and keytime>='01.18.2014 02:00:00'
или я неправильно запрашиваю.
на мой взгляд - да, неправильно.
Вы находите записи, у которых время МЕНЬШЕ 1:00 и больше 2:00
нужно с точностью до наоборот: у которых время БОЛЬШЕ-равное 1:00 и МЕНЬШЕ 2:00

я уже молчу о формате представления даты в строковой константе!!!

2) для отладки добавьте в select поле count(*)
увидите, сколько значений попадает в вашу выборку (Вы же знаете, сколько у Вас с таблице значений за 1 час, вот и сравните):
Код:
SELECT sum(p)/count(*) as P, sum(q)/count(*) as Q, count(*) as CntHour FROM fider6 WHERE ....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.01.2014, 09:27   #6
fobass
Форумчанин
 
Регистрация: 05.06.2008
Сообщений: 100
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
на мой взгляд - да, неправильно.
Вы находите записи, у которых время МЕНЬШЕ 1:00 и больше 2:00
нужно с точностью до наоборот: у которых время БОЛЬШЕ-равное 1:00 и МЕНЬШЕ 2:00
извиняюсь, невнимательность

я уже молчу о формате представления даты в строковой константе!!!

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
2) для отладки добавьте в select поле count(*)
увидите, сколько значений попадает в вашу выборку (Вы же знаете, сколько у Вас с таблице значений за 1 час, вот и сравните):
Код:
SELECT sum(p)/count(*) as P, sum(q)/count(*) as Q, count(*) as CntHour FROM fider6 WHERE ....
да, count(*)=109 строк. Но результат все ж больше.
fobass вне форума Ответить с цитированием
Старый 20.01.2014, 09:32   #7
fobass
Форумчанин
 
Регистрация: 05.06.2008
Сообщений: 100
По умолчанию

так формула расчета и есть?
Код:
SELECT sum(p)/count(*) FROM fider6 WHERE ....
fobass вне форума Ответить с цитированием
Старый 20.01.2014, 09:42   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А точно так нужно рассчитывать? Нашли средние показания чего-то - это что и есть формула расчета мощности за час?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
По технич. хар-ам авто и режиму езды определить расход топлива Huligan799 Фриланс 1 27.10.2012 14:53
Часовой циферблат! tat'yana Паскаль, Turbo Pascal, PascalABC.NET 0 25.01.2011 11:32
мини приход / расход ... (если таоке возможно в excel) paska27 Microsoft Office Excel 16 27.07.2010 22:28
БД, Запрос на приход/расход, не получается задействовать несколько обьектов kvadratnt Помощь студентам 0 06.06.2009 15:23
таблица приход-расход ISSA БД в Delphi 15 13.06.2008 11:15