Дублируйте и получите последний элемент из таблицы mysql - PullRequest
0 голосов
/ 22 апреля 2020

таблица 1 t1

+----+----------+
| id |   name   |
+----+----------+
|  1 | free     |
|  2 | basic    |
|  3 | advanced |
+----+----------+

таблица 2 t2

+----+-------+------+
| id | t1_fk | cost |
+----+-------+------+
|  1 |     2 | 1650 |
|  3 |     3 | 2000 |
|  4 |     2 |  550 |
+----+-------+------+

Я хочу получить вывод таблицы t2, но без дубликатов. Я смог получить это с помощью функции GROUP BY. Также мне нужен последний элемент на дубликате (я застрял здесь).

Вот что я пытался, и это не сработало.

SELECT id cost FROM t2 GROUP BY t1_fk ORDER BY MAX(id) DESC

любая помощь

1 Ответ

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

В MySQL 8+ мы можем использовать ROW_NUMBER здесь:

WITH cte AS (
     SELECT *, ROW_NUMBER() OVER (PARTITION BY t1_fk ORDER BY id DESC) rn
     FROM t2
)

SELECT id, t1_fk, cost
FROM cte
WHERE rn = 1;

В более ранних версиях MySQL одним из канонических способов справиться с этим было бы использование соединения с подзапросом. который находит максимальное id значение для каждого t1_fk:

SELECT a.id, a.t1_fk, a.cost
FROM t2 a
INNER JOIN
(
    SELECT t1_fk, MAX(id) AS max_id
    FROM t2
    GROUP BY t1_fk
) b
    ON a.t1_fk = b.t1_fk AND a.id = b.max_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...