0

表结构:

CREATE TABLE Test(
  ID PRIMARY KEY AUTO_INCREMENT,
  UserID INT,
  URL VARCHAR(255),
  MyTime DATETIME
)engine=myisam;

样本数据:

 ID      UserID        URL                MyTime
 1        555        /index         2013-04-01 16:43:21
 2        777        /user          2013-03-01 16:43:21
 3        555        /user          2013-03-01 13:00:00
 4        555        /panel         2013-03-01 16:00:00
 5        555        /panel         2013-03-03 15:00:00

现在查询假设选择URL不是/index的所有数据,因为/index是主页,所以我希望它被忽略。此外,它选择的数据必须是忽略/index数据的10条最新记录。如果它落在最后 10 条记录中,它也必须忽略相同的 URL,这意味着如果同一用户多次访问同一页面,我只需要选择其中一个来包含在该限制 10中。这将忽略id 为 4的/panel页面

因此用户555所需的输出将是:

 ID      UserID        URL                MyTime
 3        555        /user          2013-03-01 13:00:00
 5        555        /panel         2013-03-03 15:00:00

我的尝试:

 SELECT *
 From Test
 WHERE URL NOT LIKE '%/index%' AND UserID = '555'
 ORDER BY MyTime DESC
 LIMIT 10

此查询选择过去10条数据,但它包含重复的URL,我如何摆脱重复的 URL 并仅获取具有唯一 URL 的最新10条记录?

感谢帮助。

4

1 回答 1

2

您想将 GROUP BY 函数与子查询一起使用。如果您只想查看 url,您可以使用 subQuery。

SELECT *
FROM Test INNER JOIN
  (SELECT url, max(mytime) maxtime
   FROM Test
   WHERE URL NOT LIKE '%/index%' 
   AND UserID = '555'
   GROUP BY url) n on test.url = n.url AND n.maxtime = Test.mytime
ORDER BY maxtime DESC
LIMIT 20
于 2013-04-01T21:05:56.580 回答