Microsoft SQLServer2008にデータベースがあります
[eventlog].[dbo].[USER_OPERATION]
列のあるテーブルがあります[userID], [event_description], [event_date], [event_type], [eventID]
eventID
発生する可能性のあるすべての特定のイベントに固有です。
もちろん、特定UserID
のユーザーはイベントに固有ではありませんが(すべてのユーザーが自分に関連付けられたイベントを多数持つ可能性があります)、1人の個々のユーザーに関連付けられます。
私が欲しいのは、すべてのユーザー(つまり、every )の最新のUserID
イベントとそれに関連する情報(および特定のイベントの)event_type
のみを含むリストを提供するクエリを作成することです。eventID
event_description
説明する:
演奏するとき
SELECT *
FROM [eventlog].[dbo].[USER_OPERATION]
ORDER BY userID ASC
私はの線に沿って何かを得る
|====================================================================================|
| eventID | userID | event_description | event_date | event_type |
| | | | | |
| 123 | 2 | USER 2 broke something | 03.11.11 | CRASH |
| 391 | 2 | USER 2 filed a complaint | 30.04.10 | COMPLAINT |
| 392 | 2 | USER 2 has bought beer | 31.10.09 | PURCHASE |
| 32 | 3 | USER 3 broke something | 22.10.11 | CRASH |
| 568 | 4 | USER 4 has requested support | 05.12.11 | SUPP_REQ |
| 691 | 4 | USER 4 has bought beer | 01.12.10 | PURCHASE |
| 81 | 4 | USER 4 updated personal data | 17.07.11 | PDAT_UPD |
| 141 | 5 | USER 5 has bought beer | 16.08.11 | PURCHASE |
| 142 | 5 | USER 5 broke something | 16.08.11 | CRASH |
| 269 | 6 | USER 6 updated personal data | 27.01.12 | PDAT_UPD |
| 845 | 7 | USER 7 updated personal data | 27.01.12 | PDAT_UPD |
| | | | | |
|====================================================================================|
ご覧のとおり、一部のユーザーには、日付が異なる複数のイベントが関連付けられています。
私が欲しいのは、ユーザーのリストと、ユーザーがイベントを起こした最新の日付を表示するクエリです(出力は、基本的に、各ユーザーを1回リストし、に関連付けられた最新のイベントを表示するテーブルになります各ユーザー、および関連するevent_description、event_date、event_type info)。
このようなクエリ結果を「最近のイベントテーブル」と呼びましょう。
同じ日に何かを壊してビールを購入したユーザー5(ユーザーID 5)の「異常な状態」に注意してください。
そのような場合、2つの同じ日のイベントのどちらが「最近のイベントテーブル」に入るかは関係ありません。ランダムまたは何でも選択できます(ただし、関連するevent_descriptionおよびevent_type情報が必要です)。
理想的には、結果は次のようになります(上記と同じユーザーセットの場合)。
|====================================================================================|
| eventID | userID | event_description | event_date | event_type |
| | | | | |
| 123 | 2 | USER 2 broke something | 03.11.11 | CRASH |
| 32 | 3 | USER 3 broke something | 22.10.11 | CRASH |
| 568 | 4 | USER 4 has requested support | 05.12.11 | SUPP_REQ |
| 141 | 5 | USER 5 has bought beer | 16.08.11 | PURCHASE |
| 269 | 6 | USER 6 updated personal data | 27.01.12 | PDAT_UPD |
| 845 | 7 | USER 7 updated personal data | 27.01.12 | PDAT_UPD |
| | | | | |
|====================================================================================|
ユーザー5のような「日付重複」に対して「2つのうちのいずれかをランダムにまたは何らかのルールに従って選択する」方法がない場合、「最近のイベントテーブル」に2つのエントリがあることは、このような特殊なケースでは許容されます。それらは非常にまれであり、私はそれらを手動で処理できます。
そのような(少し幸運ではない)場合、「最近のイベントテーブル」は次のようになります。
|====================================================================================|
| eventID | userID | event_description | event_date | event_type |
| | | | | |
| 123 | 2 | USER 2 broke something | 03.11.11 | CRASH |
| 32 | 3 | USER 3 broke something | 22.10.11 | CRASH |
| 568 | 4 | USER 4 has requested support | 05.12.11 | SUPP_REQ |
| 141 | 5 | USER 5 has bought beer | 16.08.11 | PURCHASE |
| 142 | 5 | USER 5 broke something | 16.08.11 | CRASH |
| 269 | 6 | USER 6 updated personal data | 27.01.12 | PDAT_UPD |
| 845 | 7 | USER 7 updated personal data | 27.01.12 | PDAT_UPD |
| | | | | |
|====================================================================================|
これも許容されます(ただし、後で少し追加の剪定が必要になります)。
それで、私の質問を要約すると、上記の内容に沿って最近のイベントテーブルを取得するようなMicrosoft SQLクエリを作成することは可能ですか?
よろしくお願いします