Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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/4/sql-server-2008/3.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:如何进行查询,从表的数据中返回每个用户上次创建的行_Sql_Sql Server 2008_Select_Last Modified - Fatal编程技术网

SQL:如何进行查询,从表的数据中返回每个用户上次创建的行

SQL:如何进行查询,从表的数据中返回每个用户上次创建的行,sql,sql-server-2008,select,last-modified,Sql,Sql Server 2008,Select,Last Modified,考虑下表的数据 ID UserID ClassID SchoolID Created 2184 19313 10 28189 2010-10-25 14:16:39.823 46697 19313 10 27721 2011-04-04 14:50:49.433 •47423 19313 11 27721 2011-09-15 09:15:51.740 •47672 19881 11

考虑下表的数据

ID      UserID  ClassID SchoolID    Created
2184    19313   10      28189       2010-10-25 14:16:39.823
46697   19313   10      27721       2011-04-04 14:50:49.433
•47423  19313   11      27721       2011-09-15 09:15:51.740
•47672  19881   11      42978       2011-09-19 17:31:12.853
3176    19881   11      42978       2010-10-27 22:29:41.130
22327   19881   9       45263       2011-02-14 19:42:41.320
46661   32810   11      41861       2011-04-04 14:26:14.800
•47333  32810   11      51721       2011-09-13 22:43:06.053
131     32810   11      51721       2010-09-22 03:16:44.520
我想进行一个sql查询,为每个用户标识返回最后创建的行,其中的结果如下:在上面的行中,以•开头的行:

ID      UserID  ClassID SchoolID    Created
47423   19313   11      27721       2011-09-15 09:15:51.740
47672   19881   11      42978       2011-09-19 17:31:12.853
47333   32810   11      51721       2011-09-13 22:43:06.053

您可以将CTE公用表表达式与行数函数一起使用:

;WITH LastPerUser AS
(
   SELECT 
       ID, UserID, ClassID, SchoolID, Created,
       ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY Created DESC) AS 'RowNum')
   FROM dbo.YourTable
)
SELECT 
   ID, UserID, ClassID, SchoolID, Created,
FROM LastPerUser
WHERE RowNum = 1

这个CTE根据用户ID对数据进行分区,对于每个分区,ROW_NUMBER函数都会给出顺序号,从1开始,按Created DESC排序-因此,对于每个用户标识,最新一行的RowNum=1,这是我在后面的select语句中从CTE中选择的。您可以使用CTE公用表表达式和row_NUMBER函数:

;WITH LastPerUser AS
(
   SELECT 
       ID, UserID, ClassID, SchoolID, Created,
       ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY Created DESC) AS 'RowNum')
   FROM dbo.YourTable
)
SELECT 
   ID, UserID, ClassID, SchoolID, Created,
FROM LastPerUser
WHERE RowNum = 1

这个CTE根据用户ID对数据进行分区,对于每个分区,ROW_NUMBER函数都会按顺序编号,从1开始,按Created DESC排序-因此最新的一行为每个用户ID获取RowNum=1,这是我在后面的select语句中从CTE中选择的。我知道这是一个老问题,但我在MySQL中遇到了同样的问题,我想我已经找到了一种标准的sql方法来实现这一点。我只是用MySQL测试过,但我不相信我使用的是任何MySQL特有的东西

select mainTable.* from YourTable mainTable, (
    select UserID, max(Created) as Created
    from YourTable
    group by UserID
) dateTable 
where mainTable.UserID = dateTable.UserID
and mainTable.Created = dateTable.Created

我知道这是一个老生常谈的问题,但我在MySQL中也遇到了同样的问题,我想我已经找到了一种标准的sql方法来解决这个问题。我只是用MySQL测试过,但我不相信我使用的是任何MySQL特有的东西

select mainTable.* from YourTable mainTable, (
    select UserID, max(Created) as Created
    from YourTable
    group by UserID
) dateTable 
where mainTable.UserID = dateTable.UserID
and mainTable.Created = dateTable.Created

只是想知道,你怎么知道最后创建的ID是哪一个?因为用户ID 32810突出显示46661而不是47333?或者这是你的错误?由于该数字较高且创建日期晚于46661?@Tjekkles,很抱歉我错了,我用正确的数据更新了问题。。我只是想知道,你怎么知道最后创建的ID是哪一个?因为用户ID 32810突出显示46661而不是47333?或者这是你的错误?由于该数字较高且创建日期晚于46661?@Tjekkles,很抱歉我错了,我用正确的数据更新了问题。。thnx