전자 메일 목록이 포함 된 테이블에 열이 있습니다. 테이블에있는 유사한 이메일 목록에서 최신 이메일을 보관해야합니다. 예를 들면. 다음과 같이 테이블 요소가 포함되어있는 경우 :PostgreSQL의 테이블 열에서 유사한 레코드를 제거하는 방법
+--------------------------+------------------------+
| Email | Received at |
+--------------------------+------------------------+
| [email protected] | 2016-08-04 20:56:53+00 |
| [email protected] | 2016-08-04 10:56:53+00 |
| [email protected] | 2016-08-04 06:57:46+00 |
| [email protected] | 2016-08-04 13:54:42+00 |
+--------------------------+------------------------+
아래의 링크를 사용하여 나는 서로 유사있는 이메일을 찾을 수 있었다, 다음과 같이
+--------------------------+------------------------+
| Email | Received at |
+--------------------------+------------------------+
| [email protected] | 2016-08-04 20:56:53+00 |
| [email protected] | 2016-08-04 20:56:52+00 |
| [email protected] | 2016-08-04 20:56:51+00 |
| [email protected] | 2016-08-04 10:56:53+00 |
| [email protected] | 2016-08-04 10:56:52+00 |
| [email protected] | 2016-08-04 06:57:32+00 |
| [email protected] | 2016-08-04 06:57:46+00 |
| [email protected] | 2016-08-04 13:54:42+00 |
+--------------------------+------------------------+
최종 출력해야한다. 그들을 그룹화하는 것은 다음 단계입니다. 나는 그것을 이해할 수 없었다.
Finding similar strings with PostgreSQL quickly
UPDATE : 전체 데이터 세트에 대한 확실하지
CREATE EXTENSION pg_trgm;
DROP TABLE IF EXISTS roshan_email_list;
CREATE TEMPORARY TABLE roshan_email_list AS (
SELECT EXTRACT(MONTH
FROM received_at) AS MONTH, EXTRACT(YEAR
FROM received_at) AS YEAR,
email
FROM users
group by month, year, email
);
CREATE INDEX roshan_email_list_gist ON roshan_email_list
USING gist(email gist_trgm_ops);
SELECT set_limit(0.75);
-- The below query gives the similarity between emails
WITH email_similarity AS
(
SELECT similarity(n1.email, n2.email) AS sim,
n1.email AS email, n2.email AS similar_email,
n1.month, n1.year
FROM roshan_email_list n1
JOIN roshan_email_list n2 ON n1.email <> n2.email AND n1.email % n2.email AND n1.month = n2.month AND n1.year = n2.year
WHERE n1.year = 2016
ORDER BY sim DESC
)
SELECT e.sim, e.email, u.received_at,
e.similar_email, e.month, e.year
FROM email_similarity e
INNER JOIN callinize.users u ON e.email = u.email;
비슷한 질문을 찾으려면 (** [편집] **) –