2016-10-17 1 views
0

Я хочу запросить ответ, который отвечает последним различным номерам строк из текущей строки. NUMBER принимает только 2 значения.Запрос postgres, который отвечает на номер, который является последним другим значением

В таблице А приведено

 
ROWNUM NUMBER 
1  1   
2  1   
3  1   
4  1   
5  -1   
6  -1   
7  1   
8  1   
9  -1 
10  -1 
11  -1 

Ожидаемый результат от таблицы А некоторым запросом.

 
ROWNUM NUMBER LASTDIFFERENT 
1  1  5 
2  1  4 
3  1  3 
4  1  2 
5  -1  3 
6  -1  2 
7  1  3 
8  1  2 
9  -1 
10  -1 
11  -1 
+1

Каковы данные, отсутствующие в ожидаемом выходе? Я не следую логике здесь. –

+0

спасибо редактирование jorge! – Takoyaki

+1

Я не могу найти запрос, который соответствует ожидаемому результату. – Takoyaki

ответ

0

Это может относиться к категории «только потому, что вы можете этого не делать». Я не вижу каких-либо изящные решения вашей проблемы, но это рабочий раствор, по крайней мере, для данных образцов:

with switches as(
    select 
    rownum, number, 
    case 
     when lag(number) over (order by rownum) = number then 0 
     else 1 
    end switch 
    from TableA 
), 
groups as (
    select 
    rownum, number, sum (switch) over (order by rownum) group_id 
    from switches 
) 
select 
    rownum, number, -- group_id, 
    max (rownum) over (partition by group_id) - rownum + 2 as last_different 
from groups 

Я побежал это на ваших данных образцов и получил следующие результаты:

rownum number last_different 
1  1  5 
2  1  4 
3  1  3 
4  1  2 
5  -1  3 
6  -1  2 
7  1  3 
8  1  2 
9  -1  4 
10  -1  3 
11  -1  2 
+0

спасибо, это то, что я хотел. – Takoyaki