Попытка изменить еженедельный отчет. Aspen SQL
Вопрос
Я очень новичок в программировании SQL. Я пытаюсь изменить ежемесячный отчет о времени выполнения, чтобы получить информацию в еженедельный интервал времени. Мой код только выводит 0, когда начало и окончательное время находятся в том же месяце. Я не могу понять, почему.
Function TagCount ( Tag1Name char(24), Tag1Cond integer, Tag2Name char(24), Tag2Cond integer, StartTime timestamp, EndTime timestamp)
local count real;
count = (select count(*) from
(SELECT NAME,TS,VALUE AS V1VALUE FROM HISTORY WHERE (NAME = Tag2Name)
AND (PERIOD = '0:00:15')
AND (REQUEST='1')
AND (STEPPED='1')
AND TS between StartTime and EndTime JOIN
(SELECT NAME,TS,VALUE AS F1VALUE FROM HISTORY WHERE (NAME = Tag1Name)
AND (PERIOD = '0:00:15')
AND (REQUEST='1')
AND (STEPPED='1')
AND TS between StartTime and EndTime ) USING (TS)) where V1VALUE = Tag2Cond and F1Value = Tag1Cond);
Return(count);
END
local
starttime timestamp,
run_hours real,
i integer,
endtime timestamp;
starttime = '01-JUN-10 00:00:00.0';
endtime = '12-AUG-10 00:00:00.0';
write ',';
FOR i=1 TO 21 DO
run_hours = 1/240.0*TagCount('runningtag',1,'producttag',i,starttime,endtime);
IF run_hours IS NULL THEN run_hours = 0; END
write run_hours;
END
Пример данных:
Назовите TS F1Value.
RundTag 16-авгас-10 15: 35: 30,1 1
RundTag 16-авгас-10 15: 35: 45.1 1
RundTag 16-авгас-10 15: 36: 00.1 1
Rungtag 16-Aug-10 15: 36: 15.1 1
RundTag 16-авгас-10 15: 36: 30,1 1
RundTag 16-авгас-10 15: 36: 45.1 1
RungeTag 16-авгас-10 15: 37: 00.1 1
Назовите TS F1Value.
Код продукта 16-августа-10 15: 35: 30,1 13
AdvanceCode 16-авг-10 15: 35: 45.1 13
ProductCode 16-август-10 15: 36: 00.1 13
Код продукта 16-августа-10 15: 36: 15,1 13
Код продукта 16-августа-10 15: 36: 30.1 13
ProductCode 16-август-10 15: 36: 45.1 13
AdvanceCode 16-авгас-10 15: 37: 00.1 13
Я пытаюсь оценить время выполнения в часах. Просто для уточнения.
Решение
Во-первых, вы можете попробовать упростить ваш SQL для:
SELECT count(*)
FROM history h
WHERE h.period = '0:00:15'
AND h.request = '1'
AND h.stepped = '1'
AND h.ts BETWEEN StartTime AND EndTime
AND ( (h.name = Tag1Name AND h.value = Tag1Cond)
OR (h.name = Tag2Name AND h.value = Tag2Cond));
Кроме этого, я не могу понять, почему вы не получите значения для двух дат в том же месяце - если только ваши данные не содержали только ежемесячные записи, которые, как я полагаю, не так.
Не могли бы вы опубликовать несколько примеров данных из таблицы истории?