私は以下のようにCustomer Membership Recordセットを持っています。重複する行を削除して連続した日付範囲を短縮します
CustomerId | EffectiveDate | EndDate | RecordNo
A1 | 01 - 01 - 2016 | 31 - 05 - 2016 | 1
A1 | 01 - 06 - 2016 | 31 - 10 - 2016 | 2
A1 | 01 - 09 - 2016 | 31 - 12 - 2017 | 3
A1 | 02 - 11 - 2016 | 31 - 12 - 2016 | 4
A2 | 02 - 11 - 2016 | 31 - 12 - 2016 | 5
要件は
- 連続日数は、行が削除されるべき所与の顧客IDの日付の重複がある場合は1つの日付範囲
- に結合する必要がある
私の結果セットは次のようになります
CustomerId | EffectiveDate | EndDate | IsBad
A1 | 01 - 01 - 2016 | 31 - 10 - 2016 | false
A1 | 01 - 09 - 2016 | 31 - 12 - 2017 | true
A1 | 02 - 11 - 2016 | 31 - 12 - 2016 | false
A2 | 02 - 11 - 2016 | 31 - 12 - 2016 | false
これは、顧客A1、1の重複行が拒否に設定されている(IsBadプロパティがtrueに設定されている)場合です。 2つの隣接する行が1つの日付範囲に結合されました。 しかし、彼らは一日のギャップがあったため、そのままレコード番号4が保持された
データCustomerMembership
クラスがCustomerId
、EffectiveDate
、EndDate
とIsBad
特性を有するList<CustomerMembership>()
に格納されている(それは連続しませんでした)。
編集 - 入力(1番目のデータセット)が与えられた場合、どのようにして目的の出力(2番目のデータセット)を得ることができますか?事前に
おかげ
[質問タイトルにタグを入れないでください](https://stackoverflow.com/help/tagging) – Liam
どうしますか? – Liam
次試してみてください:varが(dt.AsEnumerableにeffdateから=参加) は(dt.AsEnumerableで終了日に参加)effdate.Field( "終了日")にAddDaysは、(1)enddate.Field ( "EffectiveDate") に等しいです。新しい{effdate = effdate、enddate = enddate}を選択します。 –
jdweng