1
4

2 に答える 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 に答える