d3f_alt
@d3f_alt
Студент

Пожалуйста поможете сформировать запрос исключения дублирующих взаимозаменяемых полей?

Имеется таблица friends, которая содержит 4 столбца: "№, User_ID1, User_ID2, FrDate", соотв. порядковый номер, ID первого и второго пользователей и дата начала дружбы. Требуется исключить дублирующие записи, при условии, что столбцы User_ID1 и User_ID2 являются взаимозаменяемыми, т.е. User_ID1 = 1, User_ID2 = 2 и User_ID1 = 2, User_ID = 1 - равнозначны (дубликаты) и оставить нужно ту запись, которая раньше по дате. Всю голову поломал, пытался использовать курсоры, не особо вышло.

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

SELECT DISTINCT *
FROM (
	  SELECT DISTINCT User_ID1, User_ID2, FrDate, N 
	  FROM friends AS B GROUP BY FrDate
	  UNION SELECT DISTINCT User_ID2, User_ID1, FrDate, N 
	  FROM friends AS B GROUP BY FrDate
     ) AS A
GROUP BY A.User_ID2, A.User_ID1, A.FrDate


То есть из исходной таблицы:

|      User_ID1     |      User_ID2      |   FrDate  |    N   |
|        1          |          2         | 2019-01-05|    1   |
|        2          |          1         | 2020-05-12|    2   |
|        3          |          4         | 2009-11-15|    3   |
|        5          |          7         | 2007-01-01|    4   |


Должна получиться:

|      User_ID1     |      User_ID2      |   FrDate  |
|        1          |          2         | 2019-01-05|  
|        3          |          4         | 2009-11-15|   
|        5          |          7         | 2007-01-01|


Заранее спасибо за помощь!
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
Группируйте по
CASE WHEN User_ID1 > User_ID2 THEN CONCAT ( User_ID2, '-', User_ID1 )
  ELSE CONCAT ( User_ID1, '-', User_ID2 )
END CASE
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы