SQL создает плотный ранг на основе нескольких столбцов - PullRequest
0 голосов
/ 18 октября 2018

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

Field_1 Field_2
a   
        1
        2
        3
        4
b   
        7
        8
        9
c   
        15
        20
        25

Я пытаюсь добраться до этого

Field_1 Field_2 Field_3
a               1
        1       1
        2       1
        3       1
        4       1
b               2
        7       2
        8       2
        9       2
c               3
        15      3
        20      3
        25      3

Я могу упорядочить данные с помощью следующей строки:

row_number() over (partition by null order by Field_2,Field_1) as Field_3

но это не дает мне плотного ранга, который я ищу.

1 Ответ

0 голосов
/ 18 октября 2018

Предполагая, что у вас есть какой-то столбец с инкрементным номером строки (мы назовем его row_number), вы можете использовать выражение окна для подсчета количества заполненных field_1 значений:

COUNT(field_1) OVER (ORDER BY row_number ROWS UNBOUNDED PRECEDING) AS group_number

Это делает так, чтобы каждая строка подсчитывала количество заполненных field_1 значений, которые предшествуют it (включая себя) при заказе row_number.

Вот еще несколько подробностей о технике: https://stackoverflow.com/a/30862368/477563

...