Вывод MYSQLI с INNER JOIN и GROUP BY + ORDER. Как?

Есть table_one:

 ID | PARAM | PARAM_2
  1 |    p1 |      p2
  2 |    p3 |      p4
  3 |    p5 |      p6

И есть вторая таблица, которая имеет структуру примерно такую:

 C_ID | LOCAT |       DATE
    1 |    AN | 2020-05-05
    2 |    TZ | 2020-03-05
    3 |    KA | 2020-12-25
    3 |    AN | 2020-05-25
    1 |    KL | 2020-05-15
    1 |    KL | 2020-12-15

Во второй таблице ID могут повторяться, с разными датами.

Нужно сопоставить первую и вторую таблицу так, что бы получилось следующее:

 ID |       DATE | LOCAT
  1 | 2020-12-15 |    KL // Последний раз 1 ид был записан 2020-12-15 с LOCAT KL.
  2 | 2020-03-05 |    TZ // ID 2 был записан один раз.
  3 | 2020-12-25 |    KA // Последняя запись была сделана в эту дату.

Сейчас получается сделать только с самой старой датой (при GROUP BY ID)

Вот примерный код:

SELECT
    c.id,
    c.param,
    c.param2,
    d.c_id,
    d.locat,
    d.date
FROM
    `table_once` AS c
JOIN `table2` AS d ON c.id = d.c_id
GROUP BY id
ORDER BY id

Пробовал MAX(d.date) AS lastdate - не помогает. Получается, он группирует по ID, но выводит дату самую старую.


Ответы (2 шт):

Автор решения: Darevill
SELECT * FROM (
    SELECT c.id, c.param, c.param2, d.c_id, d.locat, d.date
    FROM table_once c
    JOIN table2 AS d ON c.id = d.c_id
    ORDER BY d.date DESC
) t
GROUP BY id
ORDER BY id ASC
→ Ссылка
Автор решения: Ainar-G

ЕМНИП, это классический вариант с JOIN таблицы на саму себя:

SELECT t_1.id
     , t_1.param
     , t_1.param_2
     , t_2.locat
     , t_2_max.date
  FROM t_1
       INNER JOIN (
         SELECT t_1_id, MAX(date) AS date
           FROM t_2
          GROUP BY t_1_id
       ) AS t_2_max
          ON t_1.id = t_2_max.t_1_id
       INNER JOIN t_2
          ON t_1.id = t_2.t_1_id
         AND t_2_max.date = t_2.date
 ORDER BY t_1.id
;

DB-Fiddle: https://www.db-fiddle.com/f/iaxGWWQ8nLD3g9qRivXxF4/0.

→ Ссылка