Попытка изменить ежемесячный отчет на еженедельный. Aspen Sql - PullRequest
1 голос
/ 16 августа 2010

Я очень новичок в программировании на 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
беговой тег 16-AUG-10 15: 35: 30,1 1
беговой тег 16-AUG-10 15: 35: 45,1 1
метка 16-AUG-10 15: 36: 00,1 1
метка 16-AUG-10 15: 36: 15,1 1
метка 16-AUG-10 15: 36: 30,1 1
метка 16-AUG-10 15: 36: 45,1 1
метка 16-AUG-10 15: 37: 00,1 1

ИМЯ TS F1VALUE
код продукта 16-AUG-10 15: 35: 30,1 13
код товара 16-AUG-10 15: 35: 45,1 13
код товара 16-AUG-10 15: 36: 00,1 13
код товара 16-AUG-10 15:36: 15,1 13
код товара 16-AUG-10 15: 36: 30,1 13
код товара 16-AUG-10 15: 36: 45,1 13
код товара 16-AUG-10 15: 37: 00,1 13

Я пытаюсь оценить время работы в часах.Просто чтобы уточнить.

1 Ответ

1 голос
/ 16 августа 2010

Во-первых, можете ли вы попытаться упростить свой 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));

Кроме этого, я не могу понять, почему вы не получите значения для двух дат в одном месяце - если только ваши данныетолько содержит ежемесячные записи, что, я думаю, не так.

Не могли бы вы опубликовать некоторые образцы данных из таблицы истории?

...