我有一个表,其中包含用户对特定页面的页面浏览量的时间戳。我需要用户查看的唯一页面列表,如果用户多次访问同一页面,我需要获取该批次的最新记录。
例如:对于表tblUserPageViews,我有列
PageURL,TimeStamp,UserID,UserPageViewsID
我试过了明显的
SELECT Distinct(PageURL),TimeStamp,UserID,UserPageViewsID FROM tblUserPageViews
这不起作用
任何想法都非常感激。 感谢。
答案 0 :(得分:0)
试试这个
SELECT PageURL, UserID, UserPageViewsID, MAX(TimeStamp) TimeStamp
FROM tblUserPageViews
GROUP BY PageURL, UserID, UserPageViewsID
答案 1 :(得分:0)
SELECT MAX(PageURL),
MAX(TimeStamp),
MAX(UserID),
SUM(UserPageViewsID)
FROM tblUserPageViews
GROUP BY PageURL
答案 2 :(得分:0)
SELECT DISTINCT
适用于整行,而不是在一个特定列中。如果您只需要userId,pageURL和最大时间戳,只需一个简单的GROUP BY
即可:
SELECT
UserID
, PageURL
, MAX(TimeStamp) AS MaxTimeStamp
FROM
tblUserPageViews
GROUP BY
UserID
如果您还要显示其他列,您可以将上述查询的“包装”用于与原始表的连接:
SELECT
t.PageURL,
, t.TimeStamp
, t.UserID
, t.UserPageViewsID
FROM
tblUserPageViews AS t
JOIN
( SELECT
UserID
, PageURL
, MAX(TimeStamp) AS MaxTimeStamp
FROM
tblUserPageViews
GROUP BY
UserID
) AS tm
ON
tm.UserID = t.UserID
AND
tm.PageURL = t.PageURL
AND
tm.MaxTimeStamp = t.TimeStamp
如果您使用的是最新版本的SQL-Server(2005或更高版本),则还可以使用window functions来编写此文件。