Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 如果有最新的记录,我如何分组?_Sql Server - Fatal编程技术网

Sql server 如果有最新的记录,我如何分组?

Sql server 如果有最新的记录,我如何分组?,sql-server,Sql Server,让我们想象一下我有一张像这样的桌子 name time_stamp quantity John 2017-11-28 08:46:01 65 Clark 2017-11-28 08:44:08 98 John 2017-11-28 08:50:54 74 我需要的是,按名称分组,并从最新记录中获取数据。我不能按姓名分组,因为电脑不知道应该为John使用什么数据。我需要像这样的输出 name time_stamp

让我们想象一下我有一张像这样的桌子

name     time_stamp             quantity
John     2017-11-28 08:46:01    65
Clark    2017-11-28 08:44:08    98
John     2017-11-28 08:50:54    74
我需要的是,按名称分组,并从最新记录中获取数据。我不能按姓名分组,因为电脑不知道应该为John使用什么数据。我需要像这样的输出

name     time_stamp             quantity
Clark    2017-11-28 08:44:08    98
John     2017-11-28 08:50:54    74
因为65比74老

我尝试
选择name,MAX(time_stamp)作为time_stamp,按time_stamp分组表1中的数量,但它对我不起作用,因为-

列“table1.name”在选择列表中无效,因为它不是 包含在聚合函数或GROUP BY子句中


可以使用派生表选择最大值(时间戳)


可以使用派生表选择最大值(时间戳)

WITH CTE AS(
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY [name] ORDER BY time_stamp DESC) AS RN
    FROM YourTable)
SELECT *
FROM CTE
WHERE RN = 1;
SELECT T1.*
  FROM (
         SELECT [name]
               ,MAX(time_stamp) AS MAXtime_stamp  --MAX time_stamp by name
           FROM table1
         GROUP BY [name]
       ) AS dT INNER JOIN table1 T1 ON dT.MAXtime_stamp = T1.time_stamp 
                                   AND dT.[name] = T1.[name]