2014-09-26 1 views
1

У меня есть таблица базы данных с адресной информацией, как показано ниже.postgres присваивает одинаковые номера нескольким строкам

Адрес 1 | адрес 2 | город | состояние | местонахождение id
123 название улицы | bldg 1234 | Хьюстон | TX | 12345
123 название улицы | bldg 1234 | Хьюстон | TX | 67890
456 название улицы | bldg 7890 | Новый Орлеан | LA | 56789
789 название улицы | bldg 0121 | длинный пляж | CA | 98765
789 название улицы | bldg 0121 | длинный пляж | CA | 53218
789 название улицы | bldg 0121 | длинный пляж | CA | 13579

Таким образом, даже если местоположения имеют одинаковый адрес, у всех их есть другой идентификатор. То, что я пытаюсь сделать, это добавить новый столбец с именем «group_number», который будет группировать все идентификаторы местоположения, имеющие один и тот же адрес.

Это мой ожидаемый результат.

Номер группы | адрес 1 | адрес 2 | город | состояние | идентификатор местоположения
1 | 123 название улицы | bldg 1234 | Хьюстон | TX | 12345
1 | 123 название улицы | bldg 1234 | Хьюстон | TX | 67890
2 | 456 название улицы | bldg 7890 | Новый Орлеан | LA | 56789
3 | 789 название улицы | bldg 0121 | длинный пляж | CA | 98765
3 | 789 название улицы | bldg 0121 | длинный пляж | CA | 53218
3 | 789 название улицы | bldg 0121 | длинный пляж | CA | 13579

Я пытался использовать окно функцию как ранг(), ROW_NUM() и DENSE_RANK() и раздел по ADDRESS1 || города || состояние

Я думал, что эти функции могут позволить вам иметь одинаковые ранги в каждом разделе. Но все эти функции назначают ранжирование/порядковые номера строк по разделам.

Можете ли вы помочь мне разобраться в лучшей функции для создания номеров групп?

Благодаря

ответ

4

Я думаю, что вы хотите dense_rank() использоваться как это:

select dense_rank() over (order by address1, address2, city, state) as GroupNumber, 
     address1, address2, city, state, locationid 
from addresses a; 

Вам не нужно partition by вообще за то, что вы хотите сделать.

+0

Это все еще не работает. Событие с тем же адресом и другой информацией дает мне другой номер ранга. – user2747356

+0

@ пользователь2747356. , , Это должно дать один и тот же идентификатор, если все четыре поля одинаковы. Возможно, есть тонкие различия в значениях в каждой строке. –