从表MySQL中选择最近20个最新的唯一URL

时间:2013-04-01 20:56:53

标签: mysql database

表格结构:

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

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

因此用户 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 数据,但它包含重复的网址,如何摆脱重复的网址,只获得最新的 10 带有唯一网址的记录?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您希望将GROUP BY函数与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