Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL групира с 2 колони, когато стойностите се разменят в колони

Един от начините за определяне на „нишката“ за всеки ред е CONCAT() НАЙ-МАЛКО от двете числа с GREATEST от същите две числа.

След това можем да ГРУПИРАМЕ ПО в "нишката", за да получите най-новото generated_time . В HAVING клауза, филтрираме само онези „нишки“, които имат поне една 'INCOMING' съобщение с „ПРЕГЛЕД“ тип.

Преглед на DB Fiddle

SELECT m1.*FROM съобщение AS m1 JOIN (SELECT Concat(Най-малко(m.from_number, m.to_number), '|', Greatest(m.from_number, m.to_number)) AS нишка, Max( m.generated_time) AS max_generated_time FROM съобщение AS m GROUP BY thread HAVING Sum(m.direction ='INCOMING' AND m.type ='REVIEW')) AS dt ON dt.thread =Concat(Least(m1.from_number, m1. to_number), '|', Greatest(m1.from_number, m1.to_number)) И dt.max_generated_time =m1.generated_time; 

Резултат

<предварителен код>| ID | до_номер | от_номер | съобщение | посока | тип | генерирано_време || --- | ------------ | ------------ | --------------- | --------- | ------ | ------------------- || 3 | +15005550004 | +16232950692 | Как сте ? | ИЗХОДЯЩ | | 2019-07-13 21:15:00 || 5 | +16232950692 | +15005550001 | Приятен ден | ВХОДЯЩИ | ПРЕГЛЕД | 2019-07-12 12:17:00 |

Странична бележка:

  1. Горният подход (и текущият ви дизайн на схема) не може да използва индекси и следователно няма да бъде ефективен .
  2. Предпочитам да преработя схемата, като създам две допълнителни главни таблици. Една главна таблица ще съхранява телефонните номера:phone_id и номер
  3. Друга главна таблица ще съхранява „Нишката“, която ще съдържа phone_id стойности и thread_id . След това можете да използвате този thread_id във вашето съобщение таблица, вместо да съхранява телефонните номера.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Сравнения на UTF8 низове в MySQL

  2. Как да направя достъп до DB с Hibernate JPA безопасен за нишки?

  3. Как да показвам йерархични данни от NESTED SET с PHP?

  4. Защо се създава GRANT USAGE при първия път, когато предоставям привилегии на потребител?

  5. mysql_upgrade неуспешно - innodb таблици не съществуват?