2010-01-07 7 views
1

나는 다음과 같은 테이블이 : 내가 뭘 원하는 그룹 : 그룹 데이터SQL 그룹

| firstname | address 
+-----------+---------- 
| alex  | 338 s. michigan 
| mark  | finger 
| alex  | 338 south michigan 
| ted  | port 

이런 종류의 그러나 유사한 를 반환하지 않습니다에 의해 그룹에 firstname에 의하여 및 address 필드의 값은 address입니다.

그룹별로 적용 할 수있는 패턴이 있습니까? LIKE 패턴 시스템을 사용하고 싶습니다. 예 :

select firstname, address from t group by firstname, '%'+SUBSTRING(address,0,5)+'%' 

하지만 쿼리가 작동하지 않는 것 같습니다.

아이디어가 있으십니까? 감사!

select a.id, a.addr, b.id as b_id, b.addr as b_addr from t a, t b where 
    b.addr like concat('%', substr(a.addr, 0, 5), '%') and 
    b.id <> a.id; 

누구의 처음 5 개 주소 문자 다른 주소 아무 곳이나 나타나는 모든 레코드를 반환합니다 : 문자열이 다른 주소에서 어떤 위치에 표시 할 수 있다면, 당신은 같은 가입 할 수

답변

3

.

아니면 그냥 그룹과 문자 오 후 물건을 무시할 수 있습니다 :

https://webgis.usc.edu/Services/AddressNormalization/Default.aspx 

(확보 :

select firstname, substr(addr, 0, 5) from t group by firstname, 
    substr(addr, 0, 5); 

하면 다음과 같은 우편 주소를 정상화하기 위해 도구를 사용하는 것이 좋습니다를 ~ 2500 레코드)

1

주소의 처음 5 자까지 그룹화하려면 다음을 수행 할 수 있습니다.

select firstname, MAX(address) AS Address 
from t 
group by firstname, SUBSTRING(address,0,5) 

원하는 것은 맞습니까?

+0

사실, 나는 더 넓은 범위에서 필터링 할 수 있도록 LIKE 패턴을 사용하고 싶습니다. –