トリッキーな SQL の質問があります。これは、SQL サーバー 2008 R2 に基づいています。
Log テーブルから、同じメッセージを持つ連続するレコードを結合しMSG
( )、結合されたメッセージの数をカウントし ( COUNT
)、重複したメッセージを削除する必要があります。これも日付範囲内で行う必要があるため、その範囲外のレコードはそのままにしておきます。
これをより理解しやすくするために、データの小さな例を次に示します。
ID DATE MSG COUNT
1 2013-08-17 mail NULL
2 2013-08-17 mail NULL
3 2013-08-17 www NULL
4 2013-08-18 www NULL
5 2013-08-18 www NULL
6 2013-08-18 www NULL
7 2013-08-18 mail NULL
8 2013-08-18 www NULL
9 2013-08-19 mail NULL
10 2013-08-19 mail NULL
11 2013-08-20 mail NULL
12 2013-08-20 mail NULL
13 2013-08-21 www NULL
14 2013-08-22 mail NULL
15 2013-08-22 mail NULL
16 2013-08-23 mail NULL
17 2013-08-23 mail NULL
18 2013-08-23 mail NULL
結果は次のようになります。
ID DATE MSG COUNT
1 2013-08-17 mail NULL
2 2013-08-17 mail NULL
3 2013-08-17 www NULL
6 2013-08-18 www 3
7 2013-08-18 mail 1
8 2013-08-18 www 1
12 2013-08-20 mail 4
13 2013-08-21 www 1
15 2013-08-22 mail 2
16 2013-08-23 mail NULL
17 2013-08-23 mail NULL
18 2013-08-23 mail NULL
したがって、基本的に、クエリは
- 特定の日付範囲 (この例では から
2013-08-18
まで2013-08-22
)内のデータのみを処理します。 MSG
フィールドのテキストに基づいて連続する行を結合するCOUNT
結合されたデータをカウントし、フィールドに値を設定します- 重複レコードを削除します (この例では、ID 6 はそのままですが、ID 5 と ID 4 は削除する必要があります)。
私は SQL の専門家ではないので、助け、提案、または SQL クエリをいただければ幸いです。