2 に答える
1
ROW_NUMBER
次の関数で CTE (Common Table Expression) を使用できます。
;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 に答える