表格结构:
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 带有唯一网址的记录?
感谢您的帮助。
答案 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