2016-01-13 3 views
0

Как вы вычисляете дни журнала, когда запись приостановлена ​​и активирована несколько раз. Должен ли я назначать последовательный номер при каждом его приостановке? Или есть лучший способ сделать это?Вычисление нескольких приостановленных статусов записи

Например

If count(suspendeddate)++ >1 set sequentialnumber to 1, 2, 3 

ДАННЫЕ:

id logdate status 
1 1/1/2015 suspended 
1 1/2/2015 active 
1 1/3/2015 active 
1 1/5/2015 active 
1 1/5/2015 suspended 
2 1/2/2015 suspended 
2 1/6/2015 active 
2 1/7/2015 active 

Результата

id suspendeddays1 suspendeddays2 
1 1    369 
2 4    0 

ответ

0

Для расчета взвешенных дней, используйте lead():

select d.*, 
     datediff(day, logdate, next_logdate) daysOfSuspend 
from (select d.*, 
      lead(logdate) over (partition by id order b logdate) as next_logdate 
     from data d 
    ) t 
where status = 'suspended'; 

Это помещает каждую подвеску в отдельный ряд, а не в отдельную колонку.

+0

Что делать, если есть несколько изменений состояния, допустим, по какой-то причине запись имеет 2 или 3 изменения в строке, в которых статус был изменен на активный? Пример отредактирован. – EPV

+0

Нельзя использовать свинец, так как это проблема совместимости. – EPV

+0

@EPV. , , Каждый «приостановленный» статус заканчивается на следующей записи. Этот код по-прежнему работает. –

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