2014-09-26 36 views
1

我有一個數據庫表,其地址信息如下所示。postgres將相同的數字分配到多行

地址1 |地址2 |城市|狀態|位置ID
123 street name | bldg 1234 |休斯頓| TX | 12345
123 street name | bldg 1234 |休斯頓| TX | 67890
456 street name | bldg 7890 |新奧爾良| LA | 56789
789 street name | bldg 0121 |長灘| CA | 98765
789 street name | bldg 0121 |長灘| CA | 53218
789 street name | bldg 0121 |長灘| CA | 13579

因此,即使地點具有相同的地址,它們都具有不同的ID。 我想要做的是添加一個名爲'group_number'的新列,它將組合具有相同地址的所有位置標識。

這是我的預期結果。

組數|地址1 |地址2 |城市|狀態|位置ID
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

我試着像秩使用Windows功能(),ROW_NUM()和DENSE_RANK() 和分區的地址1 ||城市||狀態

我認爲,這些功能可以讓你有每個分區中的排名相同。 但所有這些函數都按分區分配排名/連續行號。

你能幫我弄清楚創建組號碼的最佳功能嗎?

感謝

回答

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 2014-09-27 00:43:54

+0

@ user2747356。 。 。如果所有四個字段都相同,這應該給出相同的ID。也許每行中的值存在細微的差異。 – 2014-09-27 02:26:45