有一个表a,里面数据如下地区 时间 粒子编号
 a1   b1     bh1
 a2   b2     bh1
 a3   b3     bh3
 a4   b4     bh2
 a5   b5     bh3
 ...  ...    ...有一群粒子出现在X1位置一段时间[ where 出现时间 between 'xxxxx' and 'yyyyy' and 位置='X1'];
之后出现在X2位置一段时间
……
最后出现在Xn位置一段时间;
此时我想筛选得到这样的粒子列表:
出现在所有位置的粒子为最大可能性粒子,可能性为100%;
出现在n-1个位置的粒子为可能性为(n-1)/n的粒子;
……
直到可能性为1/n的粒子;---------------------------
我的思考过程是这样的:
出现在x1位置一段时间的粒子记录到table1;
出现在x2位置一段时间的粒子记录到table2;
...
出现在xn位置一段时间的粒子记录到tablen;
然后这些tables之间进行比对,先两两比对:table1 inner join table2 得到tableB1,table1 inner join table3 得到tableB2...
比对结果在进行比对:tableB1 inner join table3,这样相当于3个表比对筛选出结果;
最后发现这样做似乎很复杂,不知道有哪个大侠能指点下有没有其他方法。

解决方案 »

  1.   

    出现在xn位置一段时间的粒子记录到tablen;
     然后这些tables之间进行比对,先两两比对:table1 inner join table2 得到tableB1,table1 inner join table3 得到tableB2...
     比对结果在进行比对:tableB1 inner join table3,这样相当于3个表比对筛选出结果;
      

  2.   

    你要 求的是 每个粒子的可能性?看了下,好像可以用分析函数,把每个粒子按地区分组,分析函数row_number得到编号1,2,......n可能性不就等于 n/总位置数 么??
      

  3.   

    不是。简化下其实是这么个一个东西:大量的粒子有运动复杂性,现在n个特殊位置设置了n个监测器;当x号检测机检测到有唯一编号的粒子经过该监测器时就记录下这个粒子在x号出现过并传输到oracle的一张表里。根据需要,出现在所有检测器记录里面的粒子为最有价值的粒子,出现在n-1个监测记录里面的粒子是可能性(n-1)/n的粒子,可能性越低这个粒子的价值就越低。
    ------
    比如设置a,b,c,d四个监测器,发射一堆粒子,最需要的找到在abcd都有记录的粒子,其次是经过abc或者abd或者bcd的粒子,再其次是经过ab,ac,ad,bc,bd,cd的粒子。
      

  4.   


    for (j=1;j<m;j++)//遍历粒子
        for  (i=0;i<n;i++)//遍历记录粒子位置的表
         a[j]=  select  count(*) from  x[i] where 编号=粒子编号 ;//找到记录
      a[j]+=a[j];  //统计记录数最后在a[m] 中取最大的 就是最有价值的 
      

  5.   

    粒子无法遍历。也不知道记录器里面有没有需要找的粒子记录。
    sql 语法应该 select a记录 inner join b记录 where a记录.粒子编号=b记录.粒子编号;
    或者select * from a记录 where a记录.粒子编号 in (select b记录.粒子编号 from b记录);
    上面是2个表联查,三个表联查需要把上面的结果集弄出来在和c记录进行比对。
      

  6.   

    粒子无法遍历。也不知道记录器里面有没有需要找的粒子记录。
    sql 语法应该 select a记录 inner join b记录 where a记录.粒子编号=b记录.粒子编号;
    或者select * from a记录 where a记录.粒子编号 in (select b记录.粒子编号 from b记录);
    上面是2个表联查,三个表联查需要把上面的结果集弄出来在和c记录进行比对。,inner join on,写错了。
      

  7.   

    粒子无法遍历--for  v_bhn in (select   粒子编号  from  a  )   loop  
    也不知道记录器里面有没有需要找的粒子记录。--如果记录器里没有这个粒子的记录  count 值就是0了嘛
    不知道我理解的有没有问题 楼主帮忙指正下 
    个人理解 楼主的问题 就是以下的意思:n 张表中 找到 记录条数最多的粒子 
    for  v_bhn in (select   粒子编号  from  a  )   loop  
    通过 这个粒子编号(v_bhn ) 在 你所记录的 table 这一系列表中找到具体粒子记录 
    然后用 n_count 记录一个粒子在所有表中的记录数总和 
     具体  tablei  这个i 值可以通过 sql 拼接 在循环里取到 
     
      

  8.   

    后面的理解是对的,光Loop估计不行,有点组合的性质在里面,,要不然都不复杂了,其实有点像 a b c d e这个字符串,有abcde,abcd,abce,bcde,abc等等这种组合,每次组合出来都是一张表不过越往后的表价值含量越低。
      

  9.   

    一个拟人化的例子:有一间谍团伙,他们开车碰头,得到的部分情报是他们在a b c d四个时间段出现在A B C D四市,然后去查看A B C D四市在a b c d时间段的监控,得到4个表,如果在a b c d里面都出现的牌照号则说明这些牌照号码是可疑度最高的,出现在其中3个城市的可疑度相对低,以此类推。