获取记录的不同值,但在select语句中也有其他记录

时间:2012-02-13 06:45:10

标签: sql-server

我有一个表,其中包含用户对特定页面的页面浏览量的时间戳。我需要用户查看的唯一页面列表,如果用户多次访问同一页面,我需要获取该批次的最新记录。

例如:对于表tblUserPageViews,我有列

  

PageURL,TimeStamp,UserID,UserPageViewsID

我试过了明显的

SELECT Distinct(PageURL),TimeStamp,UserID,UserPageViewsID FROM tblUserPageViews

这不起作用

任何想法都非常感激。 感谢。

3 个答案:

答案 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来编写此文件。