У меня есть таблица, которая содержит данные для электродвигателей в формате:
ДАТА (DateTime) | TagName (VarChar (50) | Val (Float) |
2009-11-03 17: 44: 13.000 | Motor_1 | 123,45
2009-11-04 17: 44: 13.000 | Motor_1 | 124,45
2009-11-05 17: 44: 13.000 | Motor_1 | 125,45
2009-11-03 17: 44: 13.000 | Motor_2 | 223,45
2009-11-04 17: 44: 13.000 | Motor_2 | 224,45
Данные для каждого двигателя вставляются ежедневно, поэтому будет 31 Motor_1s и 31
Motor_2s и т. Д. Мы делаем это, чтобы отслеживать это на экранах нашей системы управления.
Я использую представления для извлечения максимальных значений за последние месяцы и минимальных значений за последние месяцы.
То же самое для данных за эти месяцы. Затем я присоединяюсь к двум и вычисляю разницу
чтобы получить фактические часы работы за этот месяц. «Вал» не подлежит изменению
Накопление от ПЛК (Контроллер). Это мой запрос за последние месяцы Макс
Значение:
SELECT TagName, Val AS Hours
FROM dbo.All_Data_From_Last_Mon AS cur
WHERE (NOT EXISTS
(SELECT TagName, Val
FROM dbo.All_Data_From_Last_Mon AS high
WHERE (TagName = cur.TagName) AND (Val > cur.Val)))
Это мой запрос за последние месяцы Макс
Значение:
SELECT TagName, Val AS Hours
FROM dbo.All_Data_From_Last_Mon AS cur
WHERE (NOT EXISTS
(SELECT TagName, Val
FROM dbo.All_Data_From_Last_Mon AS high
WHERE (TagName = cur.TagName) AND (Val < cur.Val)))
Это запрос, который вычисляет разницу и работает немного медленно:
SELECT dbo.Motors_Last_Mon_Max.TagName, STR(dbo.Motors_Last_Mon_Max.Hours - dbo.Motors_Last_Mon_Min.Hours, 12, 2) AS Hours
FROM dbo.Motors_Last_Mon_Min RIGHT OUTER JOIN
dbo.Motors_Last_Mon_Max ON dbo.Motors_Last_Mon_Min.TagName = dbo.Motors_Last_Mon_Max.TagName
Я знаю, что есть лучший способ. В конечном итоге мне просто нужно общее количество последних месяцев и общее количество месяцев. Любая помощь будет оценена.
Заранее спасибо