製品へのサブスクリプションのステータス更新を示す表があります。サブスクリプションの開始時にレコードがテーブルに挿入され、サブスクリプションの終了時にそのレコードが終了日で更新されます。私たちのシステムの 1 つ (どのシステムかはわかりません) は、サブスクリプションを終了してから再び開始する (新しいレコードを作成する) 「同日ドロップ/追加」を行うことがあります。そのため、実際には何も変更されていないにもかかわらず、同じ購読者 ID が複数のレコードに関連付けられます。
サンプルデータは次のとおりです。
recID subID start end prodtype
1 19 01/11/2001 01/15/2001 A
2 19 01/15/2001 01/16/2001 A
3 19 01/16/2001 01/20/2001 A
4 19 01/30/2001 01/31/2001 A
この男は1/11に始まり、1/20に終わった。レコード 2 と 3 はシステムによって挿入されました (同日ドロップ追加ですが、実際にはそうではありませんでした)。レコード 4 は、19 さんが後で開始した別のサブスクリプションです。
各個別のサブスクリプションの最初の (実際の) レコードのみを解決しようとするコードがいくつかありますが、max() を使用してサブスクライバーごとにグループ化しないと、実際の終了日を見つけることができません。もちろん、1/11 - 1/31 と 1/30 - 1/31 の 2 つのサブスクリプションが表示されますが、これは誤りです。
このパターンを次のような 2 つのレコードに解決しようとして、私は頭を悩ませています。
subID start end prodtype
19 01/11/2001 01/20/2001 A
19 01/30/2001 01/31/2001 A
これは Teradata にありますが、単なる ANSI SQL だと思います。