2016-07-01 3 views
0

AUTHORS_CONVERSATION 열의 중복 행을 제거하고 싶습니다.날짜별로 중복 행 제거

내 코드는 다음과 같습니다 결과

SELECT AUTHORS.AUTHORS_PHOTO, 
     AUTHORS.AUTHORS_ID, 
     AUTHORS.AUTHORS_NAME, 
     AUTHORS_MESSAGES.AUTHORS_RECEIVER_ID, 
     AUTHORS_MESSAGES.AUTHORS_SENDER_ID, 
     AUTHORS_MESSAGES.MESSAGE_CONTENT, 
     AUTHORS_MESSAGES.MESSAGE_DATE, 
     AUTHORS_MESSAGES.CONVERSATION_ID, 
     AUTHORS_MESSAGES.MESSAGE_STATUS 
FROM AUTHORS_MESSAGES 
INNER JOIN AUTHORS 
    ON AUTHORS_MESSAGES.AUTHORS_SENDER_ID = AUTHORS.AUTHORS_ID 
    OR AUTHORS_MESSAGES.AUTHORS_RECEIVER_ID = AUTHORS.AUTHORS_ID 
WHERE AUTHORS.AUTHORS_ID = 1555 
ORDER BY MESSAGE_DATE DESC; 

예 :

AUTHORS_ID, AUTHORS_CONVERSATION 
1555, 1 
AUTHORS_ID, AUTHORS_CONVERSATION 
1555, 1 
AUTHORS_ID, AUTHORS_CONVERSATION 
1555, 1 
AUTHORS_ID, AUTHORS_CONVERSATION 
1555, 4 

이 될해야 :

AUTHORS_ID, AUTHORS_CONVERSATION 
1555, 1 
AUTHORS_ID, AUTHORS_CONVERSATION 
1555, 4 

내가 DATE들만 마지막 결과 순서를 보여줄 수있는 방법 그것이 중복되면 ? 고맙습니다! 나는 상황에없는 현재입니다

+0

9 개의 열을 선택하지만 결과에 2 개의 열만 있으면됩니까? – jarlh

+0

내가 틀렸을 경우 max (massage_date) 그룹을 사용하면 괜찮습니다. –

+0

AUTHORS 및 AUTHOR_MESSAGES에 기본 키 또는 고유 키 제약이 있습니까? 그들이 어떻게 지어 졌는지 말해 줄 수 있습니까? (해당 열은 해당 PK/UK에 관련되어 있음) – jackattack

답변

0

이 쿼리를 시도 ...하지만 시도하고 나에게 당신이 ID에 의해 그룹에 노력했다

SELECT AUTHORS.AUTHORS_PHOTO, 
    AUTHORS.AUTHORS_ID, 
    AUTHORS.AUTHORS_NAME, 
    AUTHORS_MESSAGES.AUTHORS_RECEIVER_ID, 
    AUTHORS_MESSAGES.AUTHORS_SENDER_ID, 
    AUTHORS_MESSAGES.MESSAGE_CONTENT, 
    AUTHORS_MESSAGES.MESSAGE_DATE, 
    AUTHORS_MESSAGES.CONVERSATION_ID, 
    AUTHORS_MESSAGES.MESSAGE_STATUS 
FROM (SELECT AUTHORS.AUTHORS_PHOTO, 
    AUTHORS.AUTHORS_ID, 
    AUTHORS.AUTHORS_NAME, 
    AUTHORS_MESSAGES.AUTHORS_RECEIVER_ID, 
    AUTHORS_MESSAGES.AUTHORS_SENDER_ID, 
    AUTHORS_MESSAGES.MESSAGE_CONTENT, 
    AUTHORS_MESSAGES.MESSAGE_DATE, 
    AUTHORS_MESSAGES.CONVERSATION_ID, 
    AUTHORS_MESSAGES.MESSAGE_STATUS ,ROW_NUMBER() OVER (PARTITION BY AUTHORS_CONVERSATION ORDER BY MESSAGE_DATE DESC) AS RowNumber FROM AUTHORS_MESSAGES 
INNER JOIN AUTHORS 
ON AUTHORS_MESSAGES.AUTHORS_SENDER_ID = AUTHORS.AUTHORS_ID 
OR AUTHORS_MESSAGES.AUTHORS_RECEIVER_ID = AUTHORS.AUTHORS_ID 
WHERE AUTHORS.AUTHORS_ID = 1555 
ORDER BY MESSAGE_DATE DESC) AS a 
WHERE a.RowNumber = 1 
+0

Erro na Linha de Comandos : 23 Coluna : 29 관련 정보 - Erro de SQL : ORA-00933 : comando SQL에 해당하지 않음 encerrado appropriateadamente 00933. 00000 - "SQL 명령 제대로 끝났습니다 " * 원인 : * 작업 : –

0

알려 주시기 바랍니다 하는가?

예 :

WHERE AUTHORS.AUTHORS_ID = 1555 AUTHORS_ID BY 기;

왜 AUTHORS_ID 및 AUTHORS_CONVERSATION 만 원한다면 DATE에 주문 하시겠습니까?

0
; WITH CTE AS(
    SELECT 
     AUTHORS.AUTHORS_PHOTO, 
     AUTHORS.AUTHORS_ID, 
     AUTHORS.AUTHORS_NAME, 
     AUTHORS_MESSAGES.AUTHORS_RECEIVER_ID, 
     AUTHORS_MESSAGES.AUTHORS_SENDER_ID, 
     AUTHORS_MESSAGES.MESSAGE_CONTENT, 
     AUTHORS_MESSAGES.MESSAGE_DATE, 
     AUTHORS_MESSAGES.CONVERSATION_ID, 
     AUTHORS_MESSAGES.MESSAGE_STATUS, 
     ROW_NUMBER() OVER (PARTITION BY AUTHORS_ID, CONVERSATION_ID ORDER BY MESSAGE_DATE DESC) AS RN 
    FROM AUTHORS_MESSAGES 
    INNER JOIN AUTHORS 
     ON AUTHORS_MESSAGES.AUTHORS_SENDER_ID = AUTHORS.AUTHORS_ID 
     OR AUTHORS_MESSAGES.AUTHORS_RECEIVER_ID = AUTHORS.AUTHORS_ID 
    WHERE AUTHORS.AUTHORS_ID = 1555 
    ORDER BY MESSAGE_DATE DESC; 
) SELECT * FROM CTE 
WHERE RN = 1 

당신은 MESSAGE_DATE에 의해 AUTHORS_ID, CONVERSATION_ID 및 주문에 의해 중복 행을 제외해야 가정. 다르다면 수정하십시오 PARTITOIN 및 ORDER 부분

+0

Window 기능이 SQL Server 2012 이상에서 작동한다는 점은 유감스럽게 생각합니다. – Esty

+0

Working man, thank you! –

+0

환영합니다. 제게 옳은 대답으로 태그하십시오. – Esty

0

일부 x, y, z 열의 중복을 피하려면 해당 열을 기준으로 그룹을 유지하십시오.