I have a problem with query. My database tabels:
FIRST TABLE
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
SECOND TABLE
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
For example like a Post and comments. I want newest comment in post.
Expected Output:
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
My query
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
I tried with MAX(date_add) but don’t work or I do it something wrong
Advertisement
Answer
You can use a subquery with MAX()
aggregation for date_add
column GROUP
ed BY notification_id
within JOIN
statements :
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