2016-07-01 5 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 

Как я могу показать только последний заказ результата по ДАТА если он дублирует ? Спасибо!

+0

Выбираете 9 столбцов, но ожидаете, что результат будет иметь только 2 столбца? – jarlh

+0

, если я не понял, что вы ошибаетесь, просто используйте max (massage_date) группу, было бы хорошо –

+0

Имеет ли АВТОРЫ и AUTHOR_MESSAGES первичный ключ или уникальные ограничения ключа? Можете ли вы рассказать нам, как они построены? (в каких колонках участвуют эти ПК/Великобритания) – jackattack

ответ

0

Я в настоящее время не в ситуации, чтобы попробовать этот запрос ... но, пожалуйста, попробуйте и дайте мне знать

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 Relatório de erros - Erro de SQL: ORA-00933: comando SQL não encerrado approadamente 00933. 00000 - "SQL command not должным образом закончился " * Причина: * Действие: –

0

вы пытались группе ID?

Пример:

ГДЕ AUTHORS.AUTHORS_ID = 1555, GROUP BY AUTHORS_ID;

И почему вы заказываете дату, если хотите только AUTHORS_ID и AUTHORS_CONVERSATION?

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 

Предполагая, что Вам нужно, чтобы исключить повторяющиеся строки по AUTHORS_ID, CONVERSATION_ID и порядке MESSAGE_DATE. Если они отличаются, пожалуйста, внесите изменения Часть PARTITOIN и ORDER

+0

Извините, что функция Window будет работать для SQL Server 2012 или более поздней версии. – Esty

+0

Рабочий, спасибо! –

+0

Добро пожаловать и пометьте меня правильным ответом. – Esty

0

Если вы пытаетесь избежать дубликатов некоторых столбцов x, y, z, сохраните группу по этим столбцам.