MySQL ВЫБРАТЬ из 2 таблиц получить новейшие записи - PullRequest
1 голос
/ 21 апреля 2020

У меня проблема с запросом. Таблицы моей базы данных:

ПЕРВЫЙ СТОЛ

Notification
id |  Subject  | date_add
---+ ----------+---------
 1 | Subject1 | 2020-04-01 12:06:00
 2 |  Subject2 | 2020-04-18 19:12:59
 3 |  Subject3 | 2020-04-21 13:46:01
 4 |  Subject4 | 2020-04-20 13:46:01 

ВТОРОЙ СТОЛ

Notification_post
    id | user_id | notification_id | description | date_add as post_date
    ---+---------+--------+-------------+---------
     1 | 1        | 1      | Text 1      | 2020-04-19 12:06:00
     2 | 2        | 1      | Text 2      | 2020-04-20 19:12:59
     3 | 3        | 1      | Text 3      | 2020-04-21 19:44:36
     4 | 2        | 2      | Text 1      | 2020-04-21 19:48:24
     5 | 1        | 2      | Text 2      | 2020-04-21 19:55:00

Например, как сообщение и Комментарии. Я хочу новый комментарий в сообщении.

Ожидаемый результат:

Notification_ID |User_id | Subject | description  | post_date
----------------+--------+---------+--------------+-------------
       1        |    3   |  Subject1 |    text 3  | 2020-04-21 19:44:36
       2        |    1   | Subject2  |   Text 2   |  2020-04-21 19:55:00

Мой запрос

SELECT * 
FROM notification n 
LEFT JOIN notification_post p ON p.notification_id=n.id 
GROUP BY p.notification_id 
ORDER BY p.date_add DESC

OUTPUT:

 Notification_ID |User_id | Subject | description  | post_date
 ----------------+--------+---------+--------------+-------------
       1             1     Subject1     Text 1        2020-04-19 12:06:00
       2             2     Subcject2    Text 1        2020-04-21 19:48:24

Я пытался с MAX (date_add), но не работает, или я делаю что-то не так

1 Ответ

0 голосов
/ 22 апреля 2020

Вы можете использовать подзапрос с агрегацией MAX() для date_add столбца GROUP ed BY notification_id в пределах JOIN операторов:

SELECT p1.notification_id, p1.user_id, n.Subject, p1.description, p2.post_date
  FROM notification_post p1
  JOIN notification n 
    ON p1.notification_id = n.id
  JOIN ( SELECT notification_id, MAX(date_add) as post_date
           FROM notification_post  
          GROUP BY notification_id ) p2
    ON p2.notification_id = p1.notification_id  
   AND p2.post_date = p1.date_add

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...