Показать сообщение отдельно
  #4  
Старый 14.12.2017, 06:20
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Можно сразу подготовить DataSet. Группируем по датам и сразу складываем твои СКО:
Код:
select DATE_CONTROL, SUM(COALESCE(CKO1,0) + COALESCE(CKO3,0)) as VALUE GROUP BY DATE_CONTROL ORDER BY DATE_CONTROL
Т.е. мы уже получили сразу уникальные даты, отсортированные по возрастанию и соотв. им значения.
2. Ну а теперь простым циклом перебираем записи и высчитываем разницу:
Код:
var
  Prev : Double;
begin
  Prev := 0;
  DataSet.First;
  While Not DataSet.EOF Do
    begin
        AddPoint(DataSet.FieldByName('DATE_CONTROL').AsDateTime,DataSet.FieldByName('Value').AsFloat - Prev);
        Prev := DataSet.FieldByName('Value').AsFloat;
        DataSet.Next;
    end;

PS. Можно все вычислить прямо в запросе, через оконные функции, но это для БД тяжелее, а потом все-равно "бежать" по датасету, так что смысла особого нет.
Ответить с цитированием