2017-04-26 14 views
1

私は、datetimeを持つ特定のユーザーの複数のレコードを保持するテーブルを持っています。このタイプのデータを取得する方法はわかりません。SQL Serverのテーブルから最新のレコードを取得

Create Table tblReport(
USERID LONG, ReportDateTime Datetime 
) 

現在のレコード

USERID   ReportDateTime 
1    2017-04-18 21:41:33.903 
4    2017-04-20 01:16:00.653 
4    2017-04-26 20:00:20.497 
71    2017-04-17 22:31:37.437 
4    2017-04-26 20:01:20.933 
225    2017-04-20 00:58:10.253 
225    2017-04-25 23:09:34.433 
1    2017-04-18 23:35:00.567 

所望の出力

USERID   ReportDateTime 
1    2017-04-18 23:35:00.567 
4    2017-04-26 20:01:20.933 
71    2017-04-17 22:31:37.437 
225    2017-04-25 23:09:34.433 

私のクエリ

select USERID,max(ReportDateTime) from tblReport group by USERID, ReportDateTime order by USERID 

答えて

2

はあなたgroup byからReportDateTimeを削除します。

select 
    UserId 
    , ReportDateTime = max(ReportDateTime) 
from tblReport 
group by userid 
order by userid 

rextesterデモ:http://rextester.com/CLQ69624

リターン:

+--------+-------------------------+ 
| UserId |  ReportDateTime  | 
+--------+-------------------------+ 
|  1 | 2017-04-18 23:35:00.567 | 
|  4 | 2017-04-26 20:01:20.933 | 
|  71 | 2017-04-17 22:31:37.437 | 
| 225 | 2017-04-25 23:09:34.433 | 
+--------+-------------------------+ 
+0

ベターとの関係句を使用しています[ReportDateTime] "構文です。しかしそうでなければ、はい、ちょうどこれ。 – pmbAustin

+4

@pmbAustin Define better?彼らは同じことを実行します。 1つはANSI標準ですが、それが「より良い」かどうかはわかりません。 [バグの悪い習慣:列エイリアスの代わりに=を使用する - Aaron Bertrand](http://sqlblog.com/blogs/aaron_bertrand/archive/2012/01/23/bad-habits-to-kick-using-as -inst-of-for-column-aliases.aspx) – SqlZim

+0

これはすごいです、どうしたらいいですか? – Anjyr

1

別のオプションとして、より標準的な「MAX(ReportDateTime)を使用する

Select Top 1 With Ties * 
From tblReport 
Order By Row_Number() over (Partition By UserID Order by ReportDateTime Desc) 
+0

私に新しいものを与えてくれてありがとう – Anjyr

+1

@Anjyrそれでは、それはいいことです。私はこのサイトで毎日何か新しいことを学びます。だから私は大ファンだ。 –

関連する問題