Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Unikalne połączenie dwóch kolumn w mysql lub postgres

Jedną z opcji, aby uzyskać wszystkie pary, niezależnie od tego, czy są do przodu, czy do tyłu (na przykład (1, 2) ==(2, 1)), jest wybranie LEAST() i GREATEST() z każdego wiersza, a następnie wybierz różne wartości. Używając tego zapytania:

SELECT DISTINCT LEAST(sender_id, recipient_id), GREATEST(sender_id, recipient_id)
FROM myTable;

Otrzymasz następujące dane wyjściowe:

| 1 | 2 |
| 1 | 3 |

Gdy już to zrobisz, możesz GRUPOWAĆ według tych, aby uzyskać maksymalną datę dla każdej pary:

SELECT LEAST(sender_id, recipient_id), GREATEST(sender_id, recipient_id), MAX(created_at)
FROM myTable
GROUP BY LEAST(sender_id, recipient_id), GREATEST(sender_id, recipient_id);

To zapytanie da ci potrzebne dane dla każdej pary, ale nie zwróci rzeczywistego wiersza z oryginalnej tabeli. Jeśli istnieje wiersz formatu | 2 | 1 | 2014-10-15 | to zapytanie zwróci | 1 | 2 | 2014-10-15 .

Aby pobrać oryginalny wiersz ze swojej tabeli, musisz JOIN pod warunkiem, że wszystkie niezbędne kolumny pasują do siebie:

SELECT m.*
FROM myTable m
JOIN(
  SELECT LEAST(sender_id, recipient_id) AS least, 
    GREATEST(sender_id, recipient_id) AS greatest,
    MAX(created_at) AS maxDate
  FROM myTable
  GROUP BY LEAST(sender_id, recipient_id), GREATEST(sender_id, recipient_id)) tmp
ON tmp.least = LEAST(m.sender_id, m.recipient_id) AND tmp.greatest = GREATEST(m.sender_id, m.recipient_id) AND tmp.maxDate = m.created_at;

Oto SQL Fiddle przykład, który pasuje do oczekiwanych wyników.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Podczas wykonywania polecenia wystąpił błąd krytyczny. w C#, gdy używam Wstaw do

  2. Dynamiczne tworzenie i zapisywanie pól formularza w bazie danych php mysql

  3. Konwersja tabel z rozróżnianiem wielkości liter w MySQL

  4. Problem z parametrami połączenia w pliku konfiguracyjnym sieci

  5. usuń znaki specjalne w php