0

日時の値に基づいて行の重複を判断しようとしていますが、これを達成する方法が完全にわかりません。ここや他のサイトの回答を読んだ後、何をする必要があるかについては大まかな理解がありますが、どこから始めればよいかわかりません。

生データ セットは区切られており、Excel、Access、Python、または Perl でこれを行うことができます。

大規模なデータ セット (約 115,000 行) 内には、3 つの異なるデータ ブロックがあります。Apple、Orange、Pear - サンプル データは次のとおりです。

データセットの画像はhttp://i.imgur.com/DQtmuvI.jpgにあります。

filename                    network     spot_id         dt_sched                dt_insert

APPLE_2012_10151135.VCA     APPLE       00NC8109450     01/01/2012 0:20:30      01/01/2012 0:23:10
APPLE_2012_10151135.VCA     APPLE       0NF81700041     01/01/2012 0:20:30      01/01/2012 0:22:40
APPLE_2012_10151135.VCA     APPLE       0NF82100170     01/01/2012 0:50:30      01/01/2012 0:48:57
APPLE_2012_10151135.VCA     APPLE       MK882000004     01/01/2012 0:50:30      01/01/2012 0:49:27
ORANGE_2012_10102135.VCA    ORANGE      0NF82100186     01/01/2012 0:15:30      01/01/2012 0:14:27
ORANGE_2012_10102135.VCA    ORANGE      00NC8139709     01/01/2012 0:15:30      01/01/2012 0:14:57
ORANGE_2012_10102135.VCA    ORANGE      0NF82400065     01/01/2012 0:31:30      01/01/2012 0:27:08
ORANGE_2012_10102135.VCA    ORANGE      000NC899740     01/01/2012 0:31:30      01/01/2012 0:27:38
ORANGE_2012_10102135.VCA    ORANGE      0NF81700041     01/01/2012 0:50:30      01/01/2012 0:46:58
ORANGE_2012_10102135.VCA    ORANGE      000NC899740     01/01/2012 0:50:30      01/01/2012 0:47:28
PEAR_2012_10125135.VCA      PEAR        0NF82100169     01/01/2012 0:15:30      01/01/2012 0:21:52
PEAR_2012_10125135.VCA      PEAR        ML817000190     01/01/2012 0:15:30      01/01/2012 0:22:22
PEAR_2012_10125135.VCA      PEAR        0NF82200043     01/01/2012 0:45:30      01/01/2012 0:47:43
PEAR_2012_10125135.VCA      PEAR        ML803000400     01/01/2012 0:45:30      01/01/2012 0:48:13

次のことが発生したかどうかを同じ日に判断する必要があります。

dt_sched と dt_insert の重複

  • アップル オーバーラップ オレンジ
  • りんごが梨に重なる
  • オレンジがアップルに重なる
  • オレンジ重ナシ
  • 洋ナシがリンゴに重なる
  • 梨がオレンジに重なる

テーブル内の各ネットワーク。Apple、Orange、Pear には、365 日分のトランザクションと、個々の日の 24 時間の期間が含まれます。元のデータ セットは Excel にあり、Access にインポートしています。

4

1 に答える 1

0

これを行うための特に効率的な方法はありません。以下に SQL ソリューションを示します。

select cdate(int(t1.dt_sched)) as thedate, t1.network, t2.network, count(*) as numoverlaps
from t t1 join
     t t2
     on int(t1.dt_sched) = int(t2.dt_sched) and
        t1.dt_sched <= t2.dt_insert and
        t2.dt_sched <= t1.dt_insert
group by cdate(int(t1.dt_sched)), t1.network, t2.network

注: このクエリはテストしていないため、構文エラーがある可能性があります。

これにより、任意の 2 つのネットワーク間のオーバーラップが決定されます。同じネットワーク上での重複を気にしない場合は、 を含めますwhere t1.network <> t2.network。リストされているもの以外のネットワークがある場合は、`where t1.network in (NETWORK LIST HERE) および t2.network in (NETWORK LIST HERE) を含めます。

于 2013-02-23T17:19:32.600 に答える