次のスキーマを持つテーブルがあります。
CREATE TABLE IF NOT EXISTS `ATTEMPTS`
(
ID INT NOT NULL AUTO_INCREMENT,
USERS_ID INT,
TESTS_ID INT,
SCORE FLOAT(10, 4),
CREATED DATETIME DEFAULT NULL,
MODIFIED DATETIME DEFAULT NULL,
IS_DELETED BIT(1) DEFAULT NULL,
PRIMARY KEY(ID)
);
ユーザーは、異なるテストを複数回試行できます。各ユーザーの最新のテスト試行をすべて返す最善の方法を考えようとしています。したがって、ユーザー A がテスト 8 を 2 回、テスト 17 を 3 回試行し、ユーザー B がテスト 8 を 1 回試行した場合、返されるテーブルには 3 つのレコード (ユーザー A から 2 つ、ユーザー B から 1 つ) が含まれます。受けた各テスト タイプの最近のテスト試行。
これには自己結合が必要だと思いますが、よくわかりません。自己結合を使用する方法はありますか? このテーブルから必要なものを返すための最良の解決策が何であるかわかりません。データの構成を考えると、「最新」でフィルタリングする方法は考えられません。基本的に、このクエリを作成する方法がわかりません。
これまでのところ、これは私の(まだ機能していない)クエリです:
SELECT a.USER_ID,
a.TEST_ID,
a.SCORE,
a.MODIFIED
FROM ATTEMPTS AS a,
ATTEMPTS AS b
WHERE a.USER_ID = b.USER_ID
AND (Some clause to deal with most recent?)
助けてくれる人に感謝します。