Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server表添加组查询中上次访问的id_Sql_Sql Server_Select_Group By_Greatest N Per Group - Fatal编程技术网

SQL Server表添加组查询中上次访问的id

SQL Server表添加组查询中上次访问的id,sql,sql-server,select,group-by,greatest-n-per-group,Sql,Sql Server,Select,Group By,Greatest N Per Group,我有一个SQL Server数据库表,其中包含用户列表及其上次访问。我想为所有访客提取最后一次访问的列表,以及表id 让我举个例子来更好地解释。 这是一个简化的版本 Visits | id | visitor | last_visit | |----|---------|------------| | 1| ABC | 2014-04-06 | | 2| DEF | 2014-04-06 | | 3| GHI | 2014-04-07 | | 4|

我有一个SQL Server数据库表,其中包含用户列表及其上次访问。我想为所有访客提取最后一次访问的列表,以及表id

让我举个例子来更好地解释。 这是一个简化的版本

Visits
| id | visitor | last_visit |
|----|---------|------------|
|   1|     ABC | 2014-04-06 |
|   2|     DEF | 2014-04-06 |
|   3|     GHI | 2014-04-07 |
|   4|     DEF | 2014-04-07 |
|   5|     ABC | 2014-04-08 |
|   6|     JKL | 2014-04-10 |
|   7|     DEF | 2014-04-12 |
以下是我想要得到的:

| id | visitor | last_visit |
|----|---------|------------|
|   3|     GHI | 2014-04-07 |
|   5|     ABC | 2014-04-08 |
|   6|     JKL | 2014-04-10 |
|   7|     DEF | 2014-04-12 |
我通过进行一个简单的分组,在没有id列的情况下获得了结果:

SELECT visitor, MAX(last_visit) FROM visits GROUP BY visitor
但是我不知道如何添加id,这对于我的目的是非常重要的。

试试这个:

SELECT a.id, a.visitor, a.last_visit
FROM visits a 
INNER JOIN (SELECT visitor, MAX(last_visit) last_visit 
            FROM visits 
            GROUP BY visitor
          ) AS b on a.visitor = b .visitor and a.last_visit = b.last_visit;

SELECT a.id, a.visitor, a.last_visit 
FROM (SELECT ROW_NUMBER() OVER (PARTITION BY a.visitor ORDER BY a.last_visit DESC) AS RowNo, 
             a.id, a.visitor, a.last_visit
      FROM visits a
    ) AS a 
WHERE RowNo = 1;
使用
行编号()
而不是
分组依据

select v.*
from (select v.*, row_number() over (partition by visitor order by last_visit desc) as seqnum
      from visits v
     ) v
where seqnum = 1;

我有大量的记录,这两个记录中哪一个会提供更好的性能?如果您完全确定last_vist是随着ID的增加而增加的,您可以选择
max(ID)
。这个例子看起来是这样的,所以。