Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск пропусков данных 
V
    Опции темы
PascalC
Дата 20.11.2013, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 19.10.2008

Репутация: нет
Всего: нет



Помогите пожалуйста с запросом

Есть таблица вида id_item - id предмета
date_item, - время
count_item - кол-во вещей, за это время
1234;2013-11-20 00:00:10;1
1234;2013-11-20 00:01:00;2
1234;2013-11-20 00:01:29;3
1234;2013-11-20 00:02:00;1
1234;2013-11-20 00:02:05;1
1234;2013-11-20 00:03:00;3
1234;2013-11-20 00:27:10;2
1234;2013-11-20 00:28:00;1
1234;2013-11-20 00:29:13;1
1234;2013-11-20 00:30:00;1
1234;2013-11-20 00:32:05;1
1234;2013-11-20 00:33:00;2
.....
В идеале я хочу получить промежутки времени более 10 минут, в которых не было записей, для данного id_item т.е. в примере выше
1234;2013-11-20 00:04:00;2013-11-20 00:26:00, формат вывода не важен
желательно с точностью до минуты.
Таких промежутков в день может быть несколько.
Такое вообще реально реализовать на plsql? 
Спасибо
PM MAIL   Вверх
Zloxa
Дата 20.11.2013, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3470
Регистрация: 12.9.2008

Репутация: 3
Всего: 161




взять предыдущую дату lag(date_item) over (partition by id_item order by date_item) и сравнив с текущей, отобрать то, что превышает требуемый интервал.

Это сообщение отредактировал(а) Zloxa - 20.11.2013, 15:30


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
PascalC
Дата 20.11.2013, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 19.10.2008

Репутация: нет
Всего: нет



Zloxa, Большое спасибо! 
Получилось так:
Код

select date1,date2,gap,id_item from (select  id_item, date_item as date2, lag(date_item,1) over (partition by id_item order by date_item) as date1,
(floor(extract(epoch from age(date_item, lag(date_item,1) over (partition by id_item order by date_item))) / 60)) as gap 
from mytable group by id_item,date_item) as t where (t.gap>10) order by id_item, date2;


Это сообщение отредактировал(а) PascalC - 20.11.2013, 23:34
PM MAIL   Вверх
Zloxa
Дата 20.11.2013, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3470
Регистрация: 12.9.2008

Репутация: 3
Всего: 161



Цитата(PascalC @  21.11.2013,  00:33 Найти цитируемый пост)
(floor(extract(epoch from age(date_item, lag(date_item,1) over (partition by id_item order by date_item))) / 60))

как-то сложно. Не знаю как в постгре(потому и не написал примера), но скорее всего как и в оракле, если вычесть две даты, получим значение равное количеству суток.... умножим на 24, умножим на 60 получим минуты. Попробуйте

Это сообщение отредактировал(а) Zloxa - 20.11.2013, 23:41


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PostgreSQL | Следующая тема »


 




[ Время генерации скрипта: 0.1103 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.