【发布时间】:2013-09-05 19:20:16
【问题描述】:
我有一个具有以下架构的表:
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 进行了两次尝试,对测试 17 进行了三次尝试,而用户 B 对测试 8 进行了一次尝试,则返回的表将有 3 条记录:两条来自用户 A,一条来自用户 B。这些记录分别是最最近对每种测试类型进行的测试尝试。
我认为为此需要自加入,但我不确定。有没有办法使用自连接?我不确定从这张表中返回我想要的东西的最佳解决方案是什么。考虑到数据的组织,我想不出一种按“最新”过滤的方法。基本上,我不确定如何构建这个查询。
到目前为止,这是我的 (NOT YET WORKING) 查询:
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?)
感谢任何可以提供帮助的人。
【问题讨论】:
-
“最新”基于
created或modified列? -
我正在审查这个。多谢你们。这个问题是重复的。我没有意识到 created 可以由 max 语句控制。
标签: mysql sql join greatest-n-per-group