2014-09-24 3 views
-1

У меня есть данные в оракуле с последовательными номерами, представляющими месяцы с данными для разных идентификаторов. В примере Start и End указаны числа, которые представляют каждый месяц последовательно (Jan13 - 205, Feb 13 - 206, 13 марта 207 и т. Д.). Мне нужно определить наибольший период времени с наибольшим количеством идентификаторов, которые имеют последовательные месяцы данных.Oracle SQL Найти самый большой остров с наибольшим количеством идентификаторов

Моя таблица выглядит следующим образом:

TAB1 
╔════════╦═══════╗ 
║ ID ║ MONTH ║ 
╠════════╬═══════╣ 
║ 111118 ║ 210 ║ 
║ 111118 ║ 211 ║ 
║ 111118 ║ 212 ║ 
║ 111118 ║ 213 ║ 
║ 111118 ║ 214 ║ 
║ 111118 ║ 215 ║ 
║ 111118 ║ 216 ║ 
║ 111118 ║ 217 ║ 
║ 111118 ║ 218 ║ 
║ 111118 ║ 219 ║ 
║ 111118 ║ 220 ║ 
║ 111118 ║ 221 ║ 
║ 111118 ║ 222 ║ 
║ 111118 ║ 223 ║ 
║ 111118 ║ 224 ║ 
║ 111118 ║ 225 ║ 
║ 111126 ║ 200 ║ 
║ 111126 ║ 201 ║ 
║ 111126 ║ 205 ║ 
║ 111126 ║ 206 ║ 
║ 111126 ║ 207 ║ 
║ 111126 ║ 208 ║ 
║ 111126 ║ 209 ║ 
║ 111126 ║ 210 ║ 
║ 111126 ║ 211 ║ 
║ 111126 ║ 212 ║ 
║ 111126 ║ 213 ║ 
║ 111126 ║ 214 ║ 
║ 111126 ║ 215 ║ 
║ 111126 ║ 216 ║ 
║ 111126 ║ 217 ║ 
║ 111126 ║ 218 ║ 
║ 111126 ║ 219 ║ 
║ 111126 ║ 220 ║ 
║ 111126 ║ 221 ║ 
║ 111126 ║ 222 ║ 
║ 111126 ║ 223 ║ 
║ 111126 ║ 224 ║ 
║ 111126 ║ 225 ║ 
║ 111127 ║ 211 ║ 
║ 111127 ║ 212 ║ 
║ 111127 ║ 213 ║ 
║ 111127 ║ 214 ║ 
║ 111127 ║ 215 ║ 
║ 111127 ║ 216 ║ 
║ 111127 ║ 217 ║ 
║ 111127 ║ 218 ║ 
║ 111127 ║ 219 ║ 
║ 111127 ║ 220 ║ 
╚════════╩═══════╝ 

Я сделал анализ острова с resulsts, подобным этим:

╔════════╦═══════╦═════╗ 
║ ID ║ START ║ END ║ 
╠════════╬═══════╬═════╣ 
║ 111118 ║ 210 ║ 225 ║ 
║ 111126 ║ 205 ║ 225 ║ 
║ 111126 ║ 200 ║ 201 ║ 
║ 111127 ║ 211 ║ 220 ║ 
╚════════╩═══════╩═════╝ 

Для этого примера лучших периодов времени, чтобы смотреть на буду либо

205-225 which includes 111118, 111126 or 
211-220 which includes 111118, 111126, 111127 

Любые предложения о том, как это сделать?

+2

Что начале и в конце означает? Они месяцы? – AndreDuarte

+0

Добро пожаловать в переполнение стека! Можете ли вы опубликовать схему своей базы данных? – tsnorri

+0

Начало и конец - это числа, которые представляют каждый месяц последовательно с начала данных. Скажем, янв13 - 205, тогда 13 февраля - 206, 13 марта 207 и т. Д. –

ответ

1

Вам нужно найти способ группировать последовательные записи вместе. Вот один подход, который мне нравится:

select id, month, 
month - row_number() over (partition by id order by month) as grp 
from yourtable 

В результате, ваше GRP поле будет одинаковым для последовательных значений в месяц колонке.

После этого все, что вам нужно сделать, это подвести итог:

select id, min(month), max(month), count(grp) 
from (query above) 
group by id, grp 
+0

Вам не нужно указывать здесь месяц, иначе +1 –

+0

Согласен! исправленный. – vav

Смежные вопросы