2

简化我正在解决的问题,但我认为以下是它的要点:

我有两个表(TableA 和 TableB),由 LEFT JOIN 连接。

我需要按时间倒序从 TableA 中获取 10 条记录;但是这十个结果中的每一个都在 TableB.foo 中具有唯一值。

IE

A.id 是 1,A.date 是两天前,B.foo 是“猫”。
A.id 是 2,A.date 是昨天,B.foo 是“猫”。
A.id 是 3,A.date 是今天,B.foo 是“狗”。
A.id 是 4,A.date 是三天前,B.foo 是“猪”。
A.id 是 5,A.date 是四天前,B.foo 是“狗”。

我希望查询的前 3 个结果是 3、2、4(并且根本不返回 1 和 5)。

这可以在单个 MySQL 查询中实现吗?

如果做不到这一点,那么在多个步骤中获得所需结果集的最有效策略是什么?

4

1 回答 1

2
SELECT T1.id, T1.date
FROM (SELECT A.id id, B.foo foo, A.date date
      FROM A JOIN B
      ON A.b_id = B.id) T1
JOIN (
    SELECT B.foo foo, MAX(A.date) maxdate
    FROM A JOIN B
    ON A.b_id = B.id
    GROUP BY B.foo) T2
ON T1.foo = T2.foo and T1.date = T2.maxdate
ORDER BY T1.date DESC
LIMIT 10
于 2012-10-11T20:11:29.023 回答