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 回答