1
4

2 回答 2

1

您可以将 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 按 对您的数据进行“分区” UserID,并且对于每个分区,该ROW_NUMBER函数会分发从 1 开始并按顺序排序的序号Created DESC- 所以最新的行获取RowNum = 1(对于每个UserID),这是我在 SELECT 语句中从 CTE 中选择的内容它。

于 2011-10-03T08:31:18.967 回答
0

我知道此时这是一个老问题,但我在 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
于 2012-08-01T17:03:44.520 回答