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. Можно все вычислить прямо в запросе, через оконные функции, но это для БД тяжелее, а потом все-равно "бежать" по датасету, так что смысла особого нет.