2

私が取り組んでいる問題を単純化することは多少ありますが、その要点は次のとおりだと思います。

LEFT JOIN で結合された 2 つのテーブル (TableA と TableB) があります。

TableA から 10 個のレコードを新しい順に取得する必要があります。ただし、これらの 10 個の結果のそれぞれが、TableB.foo に一意の値を持っています。

すなわち

A.id は 1、A.date は 2 日前、B.foo は「cat」です。
A.id は 2、A.date は昨日、B.foo は「cat」です。
A.id は 3、A.date は今日、B.foo は「犬」です。
A.id は 4、A.date は 3 日前、B.foo は「pig」です。
A.id は 5、A.date は 4 日前、B.foo は「dog」です。

クエリの上位 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 に答える