复制并从mysql表中获取最后一项

问题描述 投票:0回答:1

表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

任何帮助

mysql database
1个回答
0
投票

在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;
© www.soinside.com 2019 - 2024. All rights reserved.