Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: jameswhite13 от 22 Мая 2019, 16:09:03

Название: Ошибка в редакторе отчетов
Отправлено: jameswhite13 от 22 Мая 2019, 16:09:03
Пытаюсь сделать запрос:
Код: (sql)
SELECT id,Value, LAG(TIMESTAMP, 1) OVER(PARTITION BY id ORDER BY TIMESTAMP) AS prve_timestamp
, TIMESTAMP AS cur_timestamp
, TIMESTAMP - LAG(TIMESTAMP, 1) OVER(PARTITION BY id ORDER BY TIMESTAMP) AS difference_sec
FROM trends_data
Получаю такую ошибку:
Fatal error encountered during command execution.
Как увеличить время ожидания в редакторе запросов? или проблема не в этом? в Workbench все работает
Название: Re: Ошибка в редакторе отчетов
Отправлено: Simple-Scada от 22 Мая 2019, 23:15:31
Здравствуйте.

Время ожидания запроса можно задать в том же окне, где Вы вводите сам запрос (см. вложение). Но это не имеет смысла для запроса который Вы привели. С ним нужно нужно обязательно что-то делать, он совершенно неработоспособный из-за таких выборок:
  LAG(TIMESTAMP, 1) OVER(PARTITION BY id ORDER BY TIMESTAMP) AS prve_timestamp
  TIMESTAMP - LAG(TIMESTAMP, 1) OVER(PARTITION BY id ORDER BY TIMESTAMP) AS difference_sec
, как только таблица trends_data немного наполнится, например на 15000 записей (это произойдет быстро, если у Вас есть архивные теги), запрос уже будет выполняться слишком долго и будет сильно тормозить СУБД.
Название: Re: Ошибка в редакторе отчетов
Отправлено: jameswhite13 от 23 Мая 2019, 08:18:28
Да вы правы, добавил строку where id=, есть еще такой вопрос, запрос выводит время в секундах, я его суммирую в итоге данных, как мне перевести значения в часы?
{SumIf(Datatrends_data,trends_data.difference_sec,trends_data.Value==0)}, что сюда добавить?
Название: Re: Ошибка в редакторе отчетов
Отправлено: Simple-Scada от 24 Мая 2019, 11:15:56
В бэнде "Итог данных" по-умолчанию можно вывести только стандартные суммы по колонкам бэнда. Если нужны какие-то уникальные преобразования в свой формат, или дополнительные вычисления, то их придется делать через свои отдельные переменные. Пусть у нас есть бэнд данных, в одной колонке которого выводятся секунды и нужно в бэнде итога данных вывести их сумму в формате времени "HH:mm:ss". Стандартный итог SumIf не подойдёт, он просто подсчитывает сумму целых чисел и никак не касается формата времени "HH:mm:ss".
Поэтому придётся в словаре ответа, в разделе Переменные, создать новую переменную для подсчета суммы SumSec с типом int и значением 0. Затем нужно выделить в бэнде данных компонент в котором выводятся секунды и на событие "После печати" написать скрипт суммирования по условию в переменную SumSec:
Код: (c#)
if (trends_data.Value == 0)
  SumSec += trends_data.Seconds;
, где trends_data - имя источника данных, Seconds - колонка с секундами.
Теперь в переменной SumSec будет храниться суммарное кол-во секунд по условию. Остаётся вывести его в нужном формате. Для этого в бэнде итога данных размещаем компонент текст и пишем в него следующее выражение:
Код
{new DateTime().AddSeconds(SumSec).ToString("HH:mm:ss")}
, т.е. переводим секунды из SumSec в нужный нам формат времени.