2017-04-21 2 views
-1

私は次の変数を持つ表を使用しています: 参照番号(関連付けられているもの)。時間/日付スタンプ。イベントタイプ(intとしてコード化されています)。 、 は第二日付を共有する行を選択的に削除し、最後の1日を残します。

「複数のイベントが同じ参照番号で同じ日に発生した場合は、最後の1を除いて、それらのすべてを取る」:

はまず、私はロジックを適用し、いくつかのSQLコードが欲しいです私はいくつかのコードを(上記を実行した後)ロジックを適用します: 'イベントがその参照番号の前のイベントと同じタイプである場合、取り出してください。'

これを手伝ってもらえますか?

+2

これはコード作成サービスではありません。自分で試してみる必要がありますし、どこに問題があるのか​​を教えてください。 「私はいくつかのコードが好きです」とは決していいことではありません。 – Fred

+0

サンプルデータと望ましい結果が最も役立ちます。また、あなたのRDMSにタグを付けるのに役立ちます。 –

答えて

0

一般的に私はこのような問題を解決する必要があるとき、私は「より良い」原則を使用します。

select reference_number, event_type, created_timestamp 
from table_name best 
left join table_name better_than on better_than.reference_number = best.reference_number and better_than.created_timestamp > best.created_timestamp 
where better_than is null; 

このようなクエリが行うことは、私が後にしていることよりも「良い」ものがないことを確認することです。私はこのパターンを使用して、必要のないあらゆる種類の「複製」レコードを削除します。 select文を作成したら、それをガイドとして使用して削除などを構築できます。

上記は、必要な最初の部分を解決します。重複しているタイプを削除するには、グループを実行してください。

select reference_number, event_type, created_timestamp 
from table_name best 
left join table_name better_than on better_than.reference_number = best.reference_number and better_than.created_timestamp > best.created_timestamp 
where better_than is null 
group by best.event_type; 
関連する問題