各グループの最新のエントリを取得したいテーブルがあります。これがテーブルです:
DocumentStatusLogs
テーブル
|ID| DocumentID | Status | DateCreated |
| 2| 1 | S1 | 7/29/2011 |
| 3| 1 | S2 | 7/30/2011 |
| 6| 1 | S1 | 8/02/2011 |
| 1| 2 | S1 | 7/28/2011 |
| 4| 2 | S2 | 7/30/2011 |
| 5| 2 | S3 | 8/01/2011 |
| 6| 3 | S1 | 8/02/2011 |
テーブルはグループ化さDocumentID
れDateCreated
、降順で並べ替えられます。それぞれについてDocumentID
、最新のステータスを取得したいと思います。
私の好ましい出力:
| DocumentID | Status | DateCreated |
| 1 | S1 | 8/02/2011 |
| 2 | S3 | 8/01/2011 |
| 3 | S1 | 8/02/2011 |
各グループからトップのみを取得する集計関数はありますか?
GetOnlyTheTop
以下の疑似コードを参照してください。SELECT DocumentID, GetOnlyTheTop(Status), GetOnlyTheTop(DateCreated) FROM DocumentStatusLogs GROUP BY DocumentID ORDER BY DateCreated DESC
そのような機能が存在しない場合、私が望む出力を達成する方法はありますか?
- または、そもそも、これは正規化されていないデータベースが原因である可能性がありますか?私が探しているのは1行だけなので、それ
status
も親テーブルにあるべきですか?
詳細については、親の表をご覧ください。
現在のDocuments
テーブル
| DocumentID | Title | Content | DateCreated |
| 1 | TitleA | ... | ... |
| 2 | TitleB | ... | ... |
| 3 | TitleC | ... | ... |
親テーブルはこのようにして、ステータスに簡単にアクセスできるようにする必要がありますか?
| DocumentID | Title | Content | DateCreated | CurrentStatus |
| 1 | TitleA | ... | ... | s1 |
| 2 | TitleB | ... | ... | s3 |
| 3 | TitleC | ... | ... | s1 |
更新 私は、「適用」を使用してそのような問題に簡単に対処する方法を学びました。