0

我正在尝试根据日期时间值确定行的重叠,并且完全不知道如何实现这一点。在阅读了此处和其他站点的回复后,我在高层有一个模糊的理解需要做什么,但不知道从哪里开始。

原始数据集是分隔的,我愿意在 Excel、Access、Python 或 Perl 中执行此操作。

在更大的数据集中(大约 115,000 行)有三个不同的数据块;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

注意:我没有测试过这个查询,所以它可能有语法错误。

这将确定任何两个网络之间的重叠。如果您不关心同一网络上的重叠,请包含where t1.network <> t2.network. 如果除了列出的网络之外还有其他网络,则包括 `where t1.network in (NETWORK LIST HERE) 和 t2.network in (NETWORK LIST HERE)。

于 2013-02-23T17:19:32.600 回答