如何列出每个外键列中唯一的最新一行。
EG。 我有一张下面的儿童表:
mysql> select tstatus_id,trip_id,trip_title,trip_id from trip_history_status;
+------------+---------+-------------+
| tstatus_id | trip_id | trip_title |
+------------+---------+-------------+
| 33 | 35 | Jitesh Trip |
| 34 | 36 | Test_trip |
| 35 | 36 | Test_trip1 |
| 36 | 36 | Test_trip2 |
| 37 | 36 | Test_trip3 |
+------------+---------+-------------+
其中,
tstatus_id
=表trip_history_status
trip_id
=父表tripdetails
预期输出
+------------+-------------+---------+
| tstatus_id | trip_title | trip_id |
+------------+-------------+---------+
| 33 | Jitesh Trip | 35 |
| 37 | Test_trip3 | 36 |
+------------+-------------+---------+
但我无法思考如何解决这个问题,我得到这样的输出:
mysql> SELECT tstatus_id,trip_history_status.trip_title,tripdetails.trip_id
-> FROM (`trip_history_status`)
-> JOIN `tripdetails` ON `tripdetails`.`trip_id` = `trip_history_status`.`trip_id`
-> GROUP BY `tripdetails`.`trip_id`
-> ORDER BY `tstatus_id` Asc;
+------------+-------------+---------+
| tstatus_id | trip_title | trip_id |
+------------+-------------+---------+
| 33 | Jitesh Trip | 35 |
| 34 | Test_trip | 36 |
+------------+-------------+---------+
答案 0 :(得分:2)
您需要分两个阶段完成此操作。首先,确定每个不同tstatus_id
的最高trip_id
值,如下所示。 http://sqlfiddle.com/#!2/f7884/1/0
SELECT MAX(tstatus_id) AS tstatus_id, trip_id
FROM trip_history_status
GROUP BY trip_id
然后将其加入原始表格,如下所示http://sqlfiddle.com/#!2/f7884/2/0
SELECT a.tstatus_id, a.trip_title, a.trip_id
FROM trip_history_status AS a
JOIN (
SELECT MAX(tstatus_id) AS tstatus_id, trip_id
FROM trip_history_status
GROUP BY trip_id
) AS b ON a.tstatus_id = b.tstatus_id
MAX() ... GROUP BY...
的第一个查询确定每次旅行的最新ID。然后,您将其加入主表以检索其他信息(trip_title
)。连接操作用于消除任何没有特定行程的最新值集合中的id值的行。
此查询以稍微不同的方式执行相同的操作:http://sqlfiddle.com/#!2/f7884/3/0
SELECT tstatus_id, trip_title, trip_id
FROM trip_history_status
WHERE tstatus_id IN (
SELECT MAX(tstatus_id) AS tstatus_id
FROM trip_history_status
GROUP BY trip_id
)
答案 1 :(得分:0)
尝试此查询:
SELECT * FROM trip_history_status ths,(SELECT trip_id,MAX(tstatus_id)AS tstatus_id FROM trip_history_status GROUP BY trip_id)tmp 在哪里tmp.tstatus_id = ths.tstatus_id
您可以使用此SQL Fiddle http://sqlfiddle.com/#!2/aa834/3
对其进行测试此致