Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрос MSSQL про наработанное время в поле DATETIME [D5, MSSQL]


Страницы:   1 2

Павел ©   (2004-10-05 09:14:00) 

Уважаемые, Мастера !
Помогите составить сложнейший запрос.
Есть таблица MSSQL
logtime                        tagname tagvalue  
2004-08-20 08:42:29.000  Y4_41      1
2004-08-20 08:43:29.000  Y5_41      1
2004-08-20 08:48:47.000         Y4_41      0
2004-08-20 09:11:12.000         Y4_41      1
2004-08-20 09:13:31.000         Y4_41      0
Как подсчитать наработанное время, в данном примере таблицы, так, чтобы по полю TAGNAME по значению Y4_41 выбрало TAGVALUE 1
т.е. грубо говоря посчитало так
                      tagname tagvalue    
1 строка стоит  у нас  Y4_41 и 1
3 строка стоит у нас   Y4_41 и 0
время получится 6 мин 18 сек.
и т.д.
вот как мне посчитать это наработанное время согласно такому вот (мне кажется непонятно как я обьяснил) условию...
Получается в итоге:
Y4_41      0  = 6.18+1.19 = 7 мин 37 сек


Skyle   (2004-10-05 10:06:00) [21]

> [4] Fay ©   (05.10.04 10:04)
Почему?


Fay   (2004-10-05 10:04:00) [22]

>> Возможно для повышения точности подойдёт что-то типа timeStamp...

Не, это не прокатит. Как и BLOB 8)


Skyle   (2004-10-05 09:54:00) [23]

telepathy.Enabled := true;

Есть мнение, что TagValue - состояние какого-то измерения. 0 - выключено (что-то), 1 - включено, TagName - это идентификатор этого самого нечто.
Возможно хочется найти время, в течение которого работало нечто с идентификатором таким-то.

Моделирую.
CREATE TABLE #T (Value datetime, AName varchar(10), AId INT)

INSERT #T VALUES('2004-08-20 08:42:29.000', 'Y4_41', 1)
INSERT #T VALUES('2004-08-20 08:43:29.000', 'Y5_41', 1)
INSERT #T VALUES('2004-08-20 08:48:47.000', 'Y4_41', 0)
INSERT #T VALUES('2004-08-20 09:11:12.000', 'Y4_41', 1)
INSERT #T VALUES('2004-08-20 09:13:31.000', 'Y4_41', 0)

SELECT Tag, CAST(Sum(Val) AS datetime)
FROM (SELECT CASE WHEN AId = 0 THEN CAST(Value AS float)
            ELSE CAST(Value AS float) * -1
            END AS Val, AName AS Tag
     FROM #T
     WHERE AName = 'Y4_41') T --Такой Where потому что Y5_41 не выключен и будет минус
GROUP BY Tag

DROP TABLE #T

Всё, что выше 1900.01.01 00:00:00.0000 и будет искомое время.
Точность, конечно, не ахти какая, но тут главное понять, правильно я вопрос понял или нет....

Возможно для повышения точности подойдёт что-то типа timeStamp...


ЮЮ   (2004-10-05 09:33:00) [24]

Как понимаешь, только "на пальцах" иожно объяснить, ято первой строке должна соответствовать 3-я, а не 5-я, которая, в принципе, только временем отличается, поэтому для связи на уровне сервера - данных мало (связывать по времени, которое можно найти из агрегирующего подзапроса, выполняемого для каждой записи таблицы - занятие неблагодарное даже для MS SQL)


Fay   (2004-10-05 09:20:00) [25]

Бред какой-то. Структуру данных с описанием и русифицированный текст задачи, будьте любезны.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо