【发布时间】:2010-06-23 09:14:32
【问题描述】:
我有一张这样的桌子
date user_id page_id
2010-06-19 16:00:00 1 4
2010-06-19 16:00:00 3 4
2010-06-20 07:10:00 1 1
2010-06-20 12:00:10 1 2
2010-06-20 12:00:10 1 3
2010-06-20 13:05:00 2 1
2010-06-20 14:10:00 3 1
2010-06-21 17:00:00 2 1
我想编写一个查询,返回最后一天未访问的用户的最后一个 page_id。
所以,我可以通过以下方式找到最近一天没有访问过的人:
SELECT user_id, MAX(page_id)
FROM page_views GROUP BY user_id
HAVING MAX(date) < DATE_SUB(NOW(), INTERVAL 1 DAY);
但是,我怎样才能找到这些用户最后查看的 page_id?即我想知道哪个 page_id 对应于与 MAX(date) 在同一行中的值。如果每个日期有多个页面浏览量,我可以选择 MAX(page_id)。
上面的预期输出应该是(如果 NOW() 返回 2010-06-21 18:00:00):
user_id page_id
1 3
3 1
- user_id 1 一天前最后一次访问 在 2010-06-20 12:00:10 和 MAX(page_id) 为 3。
- user_id 2 最后 不到一天前访问过,所以他们 被忽略。
- user_id 3 上次访问 一天前,以及他们最近的 page_id 为 1。
我怎样才能做到这一点?我只需要使用 SQL。我正在使用 MySQL 衍生产品,它要求 SELECT 子句中的所有列都在 GROUP BY 子句中声明(它更符合标准)。
谢谢。
【问题讨论】: