사용자 지정 조건에서 중복 행 정리

Felix Gagnon-Grenier

메모 관리에 문제가 있습니다. 나는 항상 INSERT새로운 노트와 SELECT마지막 노트에 대한 전략으로 시작했습니다 . 웃지 마세요. 좋은 아이디어라고 생각했을 것입니다.하지만 지금은 시스템이 전면 생산되지도 않았고 약 한 달 동안 30 만 행이 삽입되었습니다. 2 년 후에 내 시스템이 실패합니다. 중복 된 줄을 병합해야합니다. notes테이블 의 구조는 다음과 같습니다 .

CREATE TABLE IF NOT EXISTS `ps_notes` (
  `CodeNTE` int(11) NOT NULL AUTO_INCREMENT,
  `CodePRS` int(11) NOT NULL,
  `CodeXYZ` int(11) NOT NULL,
  `Type` char(3) NOT NULL,
  `Focus` char(3) NOT NULL,
  `Texte` tinytext NOT NULL,
  `Date` datetime NOT NULL,
  PRIMARY KEY (`CodeNTE`),
  KEY `CodeXYZ` (`CodeXYZ`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=335068 ;

참고 사람과 관련이있을 수 있습니다 CodePRS, 반드시 관련되어 Type, Focus하고 CodeXYZ. 그들은 Texte항목이 있고 언젠가 나는 Date.

CodeXYZ메모가 첨부 된 엔티티의 고유 식별자입니다. 이 식별자는 모든 테이블에서 가져올 수 있으므로 절대적으로 고유하지 않으므로 Type필드 가 제공됩니다 . 이 필드는 상위 행이 나오는 테이블을 지정합니다. focus필드는 동일한 CodeXYZType.

다음은 몇 가지 샘플 라인입니다.

+ --------- + ------ + ------- + ------------- + ---------- -+ 
| CodeXYZ | 유형 | 초점 | Texte | 날짜 | 
+ --------- + ------ + ------- + ------------- + ---------- -+ 
| 30008 | 클릭률 | adm | 뭐든 | 2013 년 5 월 9 일 | 
| 30008 | 클릭률 | adm | 뭐든 | 2013 년 6 월 10 일 | 
| 30008 | 클릭률 | adm | Lorem ipsum | 2013-06-11 | 
| 30008 | 클릭률 | clt | 그는 멋지다 | 0000-00-00 | 
| 2546 | 클릭률 | sup | 다른 | 2013-02-11 | 
| 2546 | 클릭률 | sup | 다른 | 2013-02-11 | 
| 2546 | 클릭률 | sup | 다른 | 2013 년 2 월 19 일 | 
+ --------- + ------ + ------- + ------------- + ---------- -+

이것은 내가 갖고 싶은 출력입니다.

+---------+------+-------+-------------+-----------------------------------------+
| CodeXYZ | Type | Focus |    Texte    |                  Date                   |
+---------+------+-------+-------------+-----------------------------------------+
| 30008   | ctr  | adm   | Lorem ipsum | 2013-06-11 (I want the most recent one) |
| 30008   | ctr  | clt   | He's cool   | 0000-00-00                              |
| 2546    | ctr  | sup   | Another     | 2013-02-11                              |
| 2546    | ctr  | sup   | Another     | 2013-02-19                              |
+---------+------+-------+-------------+-----------------------------------------+

병합 조건

  1. 저도 같은이 선을 병합 할 CodeXYZ, Type그리고 FocusFocus'SUP'는 아니다.
  2. Focus'저녁을 먹다'는 내가 같은이 선을 병합 할 CodeXYZ, Type, FocusDate
  3. 항상 가장 최근의 것을 유지하고 싶습니다

그래서이 쿼리를 실행하여 임시 테이블의 행을 병합했습니다.

INSERT INTO notes_tmp (CodePRS,CodeXYZ,Type,Focus,Texte,Date)
  SELECT CodePRS,CodeXYZ,Type,Focus,Texte,Date 
  FROM notes 
  GROUP BY CodeXYZ,Type,Focus

그러나 그렇게하면 모든 줄이 마지막 줄까지 병합됩니다.

그래서 나는 이것을 생각했습니다.

INSERT INTO notes_tmp (CodePRS,CodeXYZ,Type,Focus,Texte,Date)
  SELECT CodePRS,CodeXYZ,Type,Focus,Texte,Date 
  FROM notes 
  WHERE Focus<>'sup'
  GROUP BY CodeXYZ,Type,Focus
  ORDER BY Date DESC
UNION
  SELECT CodePRS,CodeXYZ,Type,Focus,Texte,Date 
  FROM notes
  WHERE Focus='sup'
  GROUP BY CodeXYZ,Type,Focus,Date
  ORDER BY Date DESC

하지만 UNION은 올바른 위치에 있지 않습니다. INSERT INTO ... SELECTSQL 구문 에서 사용할 수 없다고 생각 합니다.

별도의 조건에 따라 동일한 테이블에서 끝나는 여러 하위 쿼리를 사용하여 단일 mysql 호출에서 해당 줄을 복사하는 것을 관리하는 방법이 있습니까?

Felix Gagnon-Grenier

그래서 @Volkan 답변의 일부로 GROUP_CONCAT ()에서 올바른 메모를 얻기 위해 어떻게 든 이상하게 작동하는 SQL을 생각해 낼 수 있습니다.

케이스는 그룹 concat의 마지막 항목을 가져옵니다. 텍스트에서 쉼표가 자주 발생하기 때문에 다른 구분 기호 (,,,)를 사용했습니다. 3 연속으로 조금 적습니다.

INSERT INTO notes_temp
SELECT CodeXYZ,Type, Focus,Texte,Date 
FROM notes WHERE Focus = 'sup'
GROUP BY CodeXYZ,Type, Focus,Date;

INSERT INTO notes_temp
SELECT 
CodeXYZ,
Type, 
Focus,
CASE
  WHEN COUNT(Texte) > 1
    THEN SUBSTR(GROUP_CONCAT(Texte SEPARATOR ",,,"),((LENGTH(GROUP_CONCAT(Texte SEPARATOR ",,,"))+2) - INSTR(REVERSE(GROUP_CONCAT(Texte SEPARATOR ",,,")),",,,")))
  ELSE
    Texte
  END
AS Texte,
MAX(Date)
FROM notes WHERE Focus <> 'sup'
GROUP BY CodeXYZ,Type, Focus;

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

사용자 지정 논리를 사용하여 중복 행 삭제

분류에서Dev

Pandas를 사용하여 중복 값에 대한 조건부 서식 지정

분류에서Dev

Handsontable에서 조건부로 중첩 된 행 스타일 지정

분류에서Dev

사용자 지정 IComparable 클래스에서 중복 제거

분류에서Dev

ArrayList에서 중복 사용자 지정 개체 제거

분류에서Dev

새 행을 추가하고 특정 조건에서 셀 값 복사

분류에서Dev

반복 중에 사용자 지정 개체 ArrayList 요소를 조건부로 제거

분류에서Dev

PySpark에서 사용자 지정 Apache Phoenix SQL 쿼리 실행

분류에서Dev

100 명의 사용자가 동시에 서비스를 실행하는 동안 Spring Rest 중복 검사가 일정 시간 건너 뛰기

분류에서Dev

fedora에서 실행중인 mongodb에서 사용자 관리자 계정을 설정할 수 없습니다.

분류에서Dev

특정 조건에 따라 Pandas에서 데이터 프레임에서 중복 행을 제거하는 방법

분류에서Dev

Wix-Windows 버전 조건에 따라 사용자 지정 작업 실행

분류에서Dev

여러 중복 열을 기반으로하는 시퀀스를 사용하여 중복 행에 자동 번호 지정 방법 (T-SQL)

분류에서Dev

사용자 지정 트리거 전후에 제약 조건이 실행됩니까?

분류에서Dev

사용자 지정 함수를 사용하여 구조체의 Vec에서 부분 중복 계산

분류에서Dev

팬더에서 중복 행에 행 플래그 지정

분류에서Dev

Python에서 사용자 지정 조건 자 정렬을 사용하는 방법

분류에서Dev

사용자 지정 조건에 따른 Django 관리자 작업

분류에서Dev

Mongodb에서 복잡한 조건부 정렬에 집계 사용

분류에서Dev

Pandas 데이터 프레임에서 새 행으로 특정 행 복사 (시간 조건)

분류에서Dev

행에서 중복 된 특정 문자 또는 숫자 찾기

분류에서Dev

Wordpress 사용자 정의 영구 링크에서 중복 된 URL 리디렉션

분류에서Dev

파이썬에서 다중 조건 Regex를 사용하여 특정 단락까지 숫자 추출

분류에서Dev

Python을 사용하여 Excel에서 특정 열 조합으로 중복 행 제거

분류에서Dev

한 행에서 중복 항목을 정렬하지만 특정 행은 유지

분류에서Dev

SQL에서 where 절 조건 사용자 지정

분류에서Dev

동적 행렬 클래스에 대한 사용자 지정 반복기 구현

분류에서Dev

조건부 서식이 지정된 셀에서 서식 복사 문제

분류에서Dev

Inno Setup-사용자 지정 페이지에서 진행률 표시 줄로 파일 복사

Related 관련 기사

  1. 1

    사용자 지정 논리를 사용하여 중복 행 삭제

  2. 2

    Pandas를 사용하여 중복 값에 대한 조건부 서식 지정

  3. 3

    Handsontable에서 조건부로 중첩 된 행 스타일 지정

  4. 4

    사용자 지정 IComparable 클래스에서 중복 제거

  5. 5

    ArrayList에서 중복 사용자 지정 개체 제거

  6. 6

    새 행을 추가하고 특정 조건에서 셀 값 복사

  7. 7

    반복 중에 사용자 지정 개체 ArrayList 요소를 조건부로 제거

  8. 8

    PySpark에서 사용자 지정 Apache Phoenix SQL 쿼리 실행

  9. 9

    100 명의 사용자가 동시에 서비스를 실행하는 동안 Spring Rest 중복 검사가 일정 시간 건너 뛰기

  10. 10

    fedora에서 실행중인 mongodb에서 사용자 관리자 계정을 설정할 수 없습니다.

  11. 11

    특정 조건에 따라 Pandas에서 데이터 프레임에서 중복 행을 제거하는 방법

  12. 12

    Wix-Windows 버전 조건에 따라 사용자 지정 작업 실행

  13. 13

    여러 중복 열을 기반으로하는 시퀀스를 사용하여 중복 행에 자동 번호 지정 방법 (T-SQL)

  14. 14

    사용자 지정 트리거 전후에 제약 조건이 실행됩니까?

  15. 15

    사용자 지정 함수를 사용하여 구조체의 Vec에서 부분 중복 계산

  16. 16

    팬더에서 중복 행에 행 플래그 지정

  17. 17

    Python에서 사용자 지정 조건 자 정렬을 사용하는 방법

  18. 18

    사용자 지정 조건에 따른 Django 관리자 작업

  19. 19

    Mongodb에서 복잡한 조건부 정렬에 집계 사용

  20. 20

    Pandas 데이터 프레임에서 새 행으로 특정 행 복사 (시간 조건)

  21. 21

    행에서 중복 된 특정 문자 또는 숫자 찾기

  22. 22

    Wordpress 사용자 정의 영구 링크에서 중복 된 URL 리디렉션

  23. 23

    파이썬에서 다중 조건 Regex를 사용하여 특정 단락까지 숫자 추출

  24. 24

    Python을 사용하여 Excel에서 특정 열 조합으로 중복 행 제거

  25. 25

    한 행에서 중복 항목을 정렬하지만 특정 행은 유지

  26. 26

    SQL에서 where 절 조건 사용자 지정

  27. 27

    동적 행렬 클래스에 대한 사용자 지정 반복기 구현

  28. 28

    조건부 서식이 지정된 셀에서 서식 복사 문제

  29. 29

    Inno Setup-사용자 지정 페이지에서 진행률 표시 줄로 파일 복사

뜨겁다태그

보관