Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2012, 15:11   #1
ИгорьСупер
Пользователь
 
Регистрация: 24.09.2012
Сообщений: 10
По умолчанию Дата и Время(Промежутки времени)SQL Server

Имеется датчик который выходит в сеть и подает сигналы...0-это датчик не работает...1-работает
нам надо время(или промежуток времени когда(валуе 1.1.1) он работал т.е. когда значение 1 т.е полный отчет времени когда работал(час.мин.сек))lдолжно работать автоматически и универсально.ВЫЧИТАТЬ ВРЕМЯ РАБОТЫ например 17.30-14.30=3 часа работал 29.06.2012 и т.д..как реализовать?спс большое заранее очень надо!!!!


id time value
1 29.06.2012 12:30 1
2 29.06.2012 12:30 0
3 29.06.2012 13:30 0
4 29.06.2012 14:30 1
5 29.06.2012 17:30 1
6 29.06.2012 19:30 1

Последний раз редактировалось ИгорьСупер; 24.09.2012 в 16:10.
ИгорьСупер вне форума Ответить с цитированием
Старый 24.09.2012, 19:30   #2
ИгорьСупер
Пользователь
 
Регистрация: 24.09.2012
Сообщений: 10
По умолчанию

нужно создать переменую diff - для хранения времени вкл
проходим в цикле по строкам
если след-я строка value =1(или 0), а в текущей value =0(или 1) то получаем diff = diff + date(след строка) - date(тек строка)
вот примерный алгоритм - винду недавно переставил, а студию еще не воткнул
ИгорьСупер вне форума Ответить с цитированием
Старый 24.09.2012, 19:34   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Можно либо рекурсивным запросом сделать такое, либо написать Multiline table return функцию, где fetch-ем делать как ты сказал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.09.2012, 19:48   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
SELECT T.time,T.value,
      (SELECT TOP 1 T1.time FROM Table1 T1 WHERE T1.time>T.time ORDER BY T1.time) AS time1,
      (SELECT TOP 1 T1.value FROM Table1 T1 WHERE T1.time>T.time ORDER BY T1.time) AS value1
  FROM Table1 T
  WHERE T.Value=1
А дальше использовать как подзапрос для расчета. Хотя не очень это нравится, медленный будет, но с индексами кто знает...
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 24.09.2012 в 19:57.
Аватар вне форума Ответить с цитированием
Старый 25.09.2012, 10:55   #5
ИгорьСупер
Пользователь
 
Регистрация: 24.09.2012
Сообщений: 10
По умолчанию

СМОТРИ НАДО ВЫЧИСЛИТЬ РАБОТУ ДВИГАТЕЛЯ..1 РАБОТАЕТ 0 НЕ РАБОТАЕТ
12.30 ПРИШЕЛ СИГНАЛ ВЛК Т.Е.1
В 12 31 ПРИШЕЛ СИГНАЛ ВЫКЛ Т.Е. 0
12.31-1230= 0001 МИН
ВОТ КАК ТО ТАК
КУРСОВ+ВАИЛ ГОВОРЯТ ПРОСТО Я УЖЕ УСТАЛ ТУПИТЬ

ПОМОГИТЕ ДЕЛОМ НЕ СМЕЙТЕСЬ РЕАЛЬНО НАЧИНАЮЩИЙ
ИгорьСупер вне форума Ответить с цитированием
Старый 25.09.2012, 10:57   #6
ИгорьСупер
Пользователь
 
Регистрация: 24.09.2012
Сообщений: 10
По умолчанию

12.31-1230= 0001 МИН т.е надо время работы т.е 1 мин
ИгорьСупер вне форума Ответить с цитированием
Старый 25.09.2012, 12:45   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
select distinct t.value, timeprevONOFF, timenextONOFF 
from ( SELECT T.time,T.value,
          (SELECT TOP 1 T1.time FROM Table1 T1 WHERE T1.time>T.time and t1.value <>t.value ORDER BY T1.time) AS timenextONOFF,  --время следующего переключения
          (SELECT TOP 1 T2.time FROM Table1 T2 WHERE T2.time<T.time and t2.value <>t.value ORDER BY T2.time DESC) AS timePrevONOFF --время предыдущего преключения
  FROM Table1 T )
P.S.
Код:
        (SELECT TOP 1 T2.time FROM Table1 T2 WHERE T2.time<T.time and t2.value <>t.value ORDER BY T2.time DESC) AS timePrevONOFF --время предыдущего преключения
не совсем оно

часть первая
Код:
select distinct tonoff.value, tonoff.time --время переключения в режим value
from ( select t.time, t.value, 
       ( select top 1 t.val from table as t1 where t1.time > t0.time order by t1.time) as nextval
       from table t ) as tonoff 
where tonoff.value<>tonoff.nextval
часть вторая
Код:
select  tON.value, tON.time as TON,
( select top 1 tOFF.time 
  from ( select distinct tonoff.value, tonoff.time --время переключения в режим value
         from ( select t.time, t.value, 
                ( select top 1 t.val from table as t1 where t1.time > t0.time order by t1.time) as nextval
                from table t ) as tonoff 
         where tonoff.value<>tonoff.nextval ) as TOFF
  where toff.time>tON.time
  order by toff.time ) as TOFF
from ( select distinct tonoff.value, tonoff.time --время переключения в режим value
       from ( select t.time, t.value, 
              ( select top 1 t.val from table as t1 where t1.time > t0.time order by t1.time) as nextval
              from table t ) as tonoff 
       where tonoff.value<>tonoff.nextval ) aw tON
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 25.09.2012 в 13:17.
evg_m вне форума Ответить с цитированием
Старый 26.09.2012, 10:17   #8
ИгорьСупер
Пользователь
 
Регистрация: 24.09.2012
Сообщений: 10
По умолчанию курсор

есть блок схема
таблица
результат (неверный)
во первых где первая единица так как в таблице идет 1 0 1 1 1
время указал в юникс-время т.е. секунды
ниже код курсора
что то неправильно
цикл немогу додумать помогите
результат на рис.-30
хотя надо получить время работы
примерная работа алгоритма представлена в блок схеме..надеюсь на ваши умные знания спс заранее
use [iliar_test]
go
DECLARE @Result int
DECLARE @Start int
DECLARE @Stop int
DECLARE @time int
DECLARE @value int
DECLARE @dvig int
DECLARE @id int
SET @time = ''
SET @dvig = 0

DECLARE cursor_checkArea CURSOR FOR
SELECT * FROM ilik_DB1

OPEN cursor_checkArea

FETCH NEXT FROM cursor_checkArea INTO @id,@time,@value

WHILE @@FETCH_STATUS = 0 BEGIN

IF @value = 1 and @dvig=0

SET @Start = @time
ELSE
SET @Stop = @time


SET @Result = @Stop-@Start


FETCH NEXT FROM cursor_checkArea INTO @id,@time,@value

END

CLOSE cursor_checkArea
DEALLOCATE cursor_checkArea
select @Start,@Stop,@Result
Изображения
Тип файла: jpg 333.jpg (45.7 Кб, 125 просмотров)
ИгорьСупер вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с выводом звука определенной частоты в короткие промежутки времени. JekaDefer Общие вопросы Delphi 31 28.08.2012 08:04
Время и дата adja051 Помощь студентам 2 09.10.2010 12:15
увеличение времени ожидания ответа от SQL Server furstenberg БД в Delphi 12 29.07.2009 15:41
Доступ к БД (SQL server) в ОС Windows server 2003 Mann SQL, базы данных 2 07.12.2008 19:15
Промежутки времени SatiriK(rus) SQL, базы данных 4 19.11.2008 00:37