0

私はこれに似たテーブルを持っています

Table(Id int, PropertyId int, UserId int, AccesedOn datetime)

そのため、テーブルは 1 人のユーザーに対して 1 つのプロパティの値を持つことができますが、時間は異なります。

Eg.
1,100,5, 2012-10-16 16:24:48
2,100,5, 2012-10-17 11:22:00
3,100,5, 2012-10-18 17:10:05

ここで試しているのは、特定のユーザーに対して個別のプロパティを選択することですが、最近のアクセス時間順に並べ替えます。

また、このテーブルを他の 3 つのテーブルに結合しているため、値が重複しています。したがって、DISTINCTコマンドを使用する必要があります。

私が持っている問題は、私がやっているので、 AccesedOn列の値が異なるorderby AccesedOnため、個別の値をもたらさない select ステートメントに表示する必要があることです。

上記の例では、のみを返す必要があります3,100,5, 2012-10-18 17:10:05

これを克服するための提案はありますか?

4

3 に答える 3

3
;WITH CTE as(
select *,ROW_NUMBER() over (partition by PropertyId,UserId  order by AccesedOn desc) as rn
from table1)

select * from CTE where rn=1
于 2012-10-16T15:59:17.987 に答える
1

これを明確にする必要があるよりも、副選択が必要になる可能性が高くなります。

select * 
from Table A
where AccessedOn in
  (Select max(AccessedOn) from table B where A.UserId = B.UserId)
于 2012-10-16T15:58:20.220 に答える
1

を使用する代わりに、残りの列をDISTINCT使用してグループ化できますMAX()

Select Id, PropertyId, UserId, MAX(AccesedOn)
From Table t
group by Id, PropertyId, UserId

これにより、探している結果が得られるはずです。

于 2012-10-16T16:05:28.363 に答える