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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2011, 02:21   #1
Алексей прим
Новичок
Джуниор
 
Регистрация: 16.08.2011
Сообщений: 3
По умолчанию сравнение множества последовательных данных по Datetime

Доброго времени суток! столкнулся с проблемой, в силу своей неопытности которую решить не могу. Надеюсь на участие!
Суть задачи:
1. для набора "операций", описанным в существующей таблице ITGTRANSHIST присвоены следующие значения (перечисляю только те, по которым и будет происходить сравнение и выборка):
№ операции | TRANSID | type=DECIMAL
время операции | transdatetime | type=date ('dd.mm.yy hh24:mi:ss')
№ устр на кот. была операция | Deviceid | type=DECIMAL

2. Необходимо: для каждого Устройства (Deviceid) вычислить время, за которое не осуществлялось ни одной операции в течении 2-х часов. Т.е. разница по времени между 2-мя последовательными номерами операций TRANSID для каждого устройства превышает 2 ч.

--С выборкой всех операций за определенное число проблем не возникает:

select transid, transdatetime, deviceid
from itgtranshist
where deviceid between 327681 and 327788
and transdatetime > to_date('15.08.11 00:00:00','dd.mm.yy.hh24:mi:ss')
order by deviceid;

Вопрос - как сравнить найти грубо говоря "время простоя" на данном устройстве?
Алексей прим вне форума Ответить с цитированием
Старый 16.08.2011, 06:31   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Просьба, называть используемую СУБД и среду разработки.
Прик вне форума Ответить с цитированием
Старый 16.08.2011, 07:06   #3
Алексей прим
Новичок
Джуниор
 
Регистрация: 16.08.2011
Сообщений: 3
По умолчанию

Oracle 9i
viewODBC 1.20
Алексей прим вне форума Ответить с цитированием
Старый 16.08.2011, 08:48   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
SELECT E.deviceid,MAX(E.NextTime-E.transdatetime)
  FROM (
    SELECT deviceid,transdatetime,
      (SELECT MIN(R.transdatetime)
         FROM itgtranshist R
         WHERE R.deviceid=T.deviceid AND
               R.transdatetime>T.transdatetime) AS NextTime
      FROM itgtranshist T
      WHERE T.transdatetime BETWEEN <нач.интервала> AND <конец.интервала> AND
            T.deviceid BETWEEN 327681 and 327788) E
  GROUP BY E.deviceid
Если вложенные запросы поддерживаются - для каждого устр-ва получен MAX интервал. Что не хорошо - NextTime может NULL быть, возможно отбросить в запросе такие варианты или заменить NULL на <конец.интервала>?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 16.08.2011 в 12:13.
Аватар вне форума Ответить с цитированием
Старый 17.08.2011, 05:08   #5
Алексей прим
Новичок
Джуниор
 
Регистрация: 16.08.2011
Сообщений: 3
По умолчанию

сожалею...не работает!
Алексей прим вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Через множества заданы сорта роз,выращиваемых цветоводами. Ввод множества с клавиатуры,сравнение множеств BAMbarBIO Паскаль, Turbo Pascal, PascalABC.NET 5 31.05.2011 13:17
MySQL сравнение множества с множеством. vedro-compota SQL, базы данных 6 31.01.2011 14:05
Передача данных с последовательных портов на параллельные eclipseg Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 16.01.2011 12:03
Тип данных Datetime - нужен только формат Year Blondy SQL, базы данных 3 10.10.2010 00:55
Множества... сравнение алфавитов Верчик Помощь студентам 6 11.06.2007 00:28