表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 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;