仅返回已连接表中行的有序子集

时间:2015-12-09 05:10:48

标签: mysql select join subquery

在MySQL数据库中给出这样的结构

#data_table
(id) | user_id | time | (...)

#relations_table
(id) | user_id | user_coach_id | (...)

我们可以选择属于某个data_table的所有user_coach_id行(让我们说1)

SELECT rel.`user_coach_id`, dat.*
FROM `relations_table` rel
LEFT JOIN `data_table` dat ON rel.`uid` = dat.`uid`
WHERE rel.`user_coach_id` = 1
ORDER BY val.`time` DESC

返回类似

的内容
| user_coach_id | id | user_id | time | data1 | data2 | ...
|             1 |  9 |       4 |   15 |   foo |   bar | ...
|             1 |  7 |       3 |   12 |   oof |   rab | ...
|             1 |  6 |       4 |   11 |   ofo |   abr | ...
|             1 |  4 |       4 |    5 |   foo |   bra | ...

(等等。当然,时间不是现实中的整数,而是为了保持简单。)

但是现在我想查询(理想情况下)每个不同data_table的{​​{1}}行的任意数量的行,但仍然有那些有序的行(即最新的行)。这甚至可能吗?

我知道我可以使用user_id每个用户只返回1行,但是排序不起作用,结果中哪一行似乎有点不可预测。我猜它可以用子查询来实现,但我还没想到它。

1 个答案:

答案 0 :(得分:0)

限制每个GROUP中的行数很复杂。最好用@variable来计算,加上一个外部查询来抛出超出限制的行。

我在Groupwise Max上的博客提供了一些如何做到这一点的提示。