1

私の(サブ)クエリは、次のデータセットになります:

+---------+------------+-----------+
| item_id | version_id | relevance |
+---------+------------+-----------+
|       1 |          1 |        30 |
|       1 |          2 |        30 |
|       2 |          3 |        22 |
|       3 |          4 |        30 |
|       4 |          5 |        18 |
|       3 |          6 |        30 |
|       2 |          7 |        22 |
|       1 |          8 |        30 |
|       5 |          9 |        48 |
|       4 |         10 |        18 |
|       5 |         11 |        48 |
|       3 |         12 |        30 |
|       3 |         13 |        31 |
|       4 |         14 |        19 |
|       2 |         15 |        22 |
|       1 |         16 |        30 |
|       5 |         17 |        49 |
|       2 |         18 |        22 |
+---------+------------+-----------+
18 rows in set (0.00 sec)

アイテムとバージョンは別々の InnoDB テーブルに保存されます。どちらのテーブルにも自動インクリメント主キーがあります。バージョンにはアイテムへの外部キー (item_id) があります。

私の質問: 関連性に基づいてサブセットを取得するにはどうすればよいですか?

最も関連性の高いバージョンを含む次のサブセットを取得したいと思います。

+---------+------------+-----------+
| item_id | version_id | relevance |
+---------+------------+-----------+
|       1 |         16 |        30 |
|       2 |         18 |        22 |
|       3 |         13 |        31 |
|       4 |         14 |        19 |
|       5 |         17 |        49 |
+---------+------------+-----------+

関連性が等しい場合は、MAX(version_id) を取得するのがさらに理想的です。

グループ化、結合、順序付けなど、さまざまな方法で試しましたが、目的の結果を得ることができません。私が試したことのいくつかは次のとおりです。

SELECT    item_id, version_id, relevance
FROM      (subquery) a
GROUP BY  item_id
ORDER BY  relevance DESC, version_id DESC

しかし、もちろん順序付けは事後に行われるため、関連性と MAX(version_id) 情報の両方が失われます。

ご意見をお聞かせください。

4

1 に答える 1