现在有这样一张表 table1
id     Name   No1   No2
1      A       1     -1
1      B       1      1
------------------------
2      A       2     -2
2      B       2      2
------------------------
3      A       3     -3
3      B      -1      3
------------------------
4      A       4      1
4      B      -2      4
------------------------
5      A      -1      2
5      B       1      5
------------------------
6      A      -1     -1
6      B       2      6
表的No1跟No2的规律是一样的
每多一条数据,他就自身加1或者-1
或者回到自己的初始值,初始值就是1或者是-1
他的上一条数据为负数,初始值就是1
他的上一条数据为正数,他的初始值就是-1比如现在No1 是3 下一条可能是4
但是也有可能下一条变成-1或者No2 现在是-2  下一条可能是-3
但是也可能变成1
id     Name   No1   No2
100    A       3     -2
------------------------
101    A       4     -3
------------------------
102    A      -1      1
------------------------
103    A      -2     -1
------------------------
104    A       1     -2
------------------------
想求一个思路,把这个表里的最大值统计出来,但是不能取重复的
比如No1:1 2 3 -1 -2 -3 -4 1 2 3 4 5 6 7 -1 -2 -3 -4 -5 -6 1 2 3 4
这里边要取得就是 3  -4    7   -6   4不知道说明白了没有,有什么疑问都问我
适用sql统计

解决方案 »

  1.   

    我现在的做法就是把每个指标循环 然后取它的值
    如果这条数据时1或者-1,那就是取它的前一条数据的值
    然后存到另外一个表
    现在是因为有很多指标   A,B,C……N     No1,No2,No3……NoN计算起来效率很低 
      

  2.   

      这个你得转sql版了,, 哪里高人多
      

  3.   

    可以根据id列自链接,把id相同的2行变成1行,
    然后按照你提出的规律过滤即可。
      

  4.   


    IF OBJECT_ID('a') IS NOT NULL
    DROP TABLE aCREATE TABLE a
    (
    id INT,
    NAME VARCHAR(20),
    no1 INT,
    no2 INT)INSERT INTO a 
    SELECT '1','A',1,-1 UNION ALL
    SELECT '2','A',2,-2 UNION ALL
    SELECT '3','A',3,-3 UNION ALL
    SELECT '4','A',4,-4 UNION ALL
    SELECT '5','A',-1,-5 UNION ALL
    SELECT '6','A',-2,-6 UNION ALL
    SELECT '7','A',-3,-7 UNION ALL
    SELECT '8','A',-4,-8 UNION ALL
    SELECT '9','A',1,-9 UNION ALL
    SELECT '10','A',2,1 UNION ALL
    SELECT '11','A',-1,2 UNION ALL
    SELECT '12','A',-2,3
    SELECT 
    t2.*,
    (SELECT TOP 1 no1
     FROM a WHERE t2.NAME = NAME AND id<t2.id ORDER BY id desc ) AS aa
    FROM a t2
    WHERE  No1 =1 OR no1 = -1
    /*(12 行受影响)
    id          NAME                 no1         no2         aa
    ----------- -------------------- ----------- ----------- -----------
    1           A                    1           -1          NULL
    5           A                    -1          -5          4
    9           A                    1           -9          -4
    11          A                    -1          2           2(4 行受影响)*/
    这里头尾还得稍微处理一下,你可以自己再稍稍修改一下
      

  5.   

    IF OBJECT_ID('tb','U') IS NOT NULL
    DROP TABLE tb
    GOCREATE TABLE tb(id INT,NAME VARCHAR(20),no1 INT)INSERT INTO tb 
    SELECT '1','A',1 UNION ALL
    SELECT '2','A',2 UNION ALL
    SELECT '3','A',3 UNION ALL
    SELECT '4','A',-1 UNION ALL
    SELECT '5','A',-2 UNION ALL
    SELECT '6','A',-3 UNION ALL
    SELECT '7','A',-4 UNION ALL
    SELECT '8','A',1 UNION ALL
    SELECT '9','A',2 UNION ALL
    SELECT '10','A',3 UNION ALL
    SELECT '11','A',4 UNION ALL
    SELECT '12','A',5 UNION ALL
    SELECT '13','A',6 UNION ALL
    SELECT '14','A',-1 UNION ALL
    SELECT '15','A',-2 UNION ALL
    SELECT '16','A',-3 UNION ALL
    SELECT '17','A',-4select a.id,a.no1 from tb a left join tb b on a.id = b.id - 1 where abs(a.no1) > abs(isnull(b.no1,0))/*
    id          no1
    ----------- -----------
    3           3
    7           -4
    13          6
    17          -4(4 行受影响)
    */
      

  6.   

    到底想要什么形式的结果,最好可以列一下。create table tb1 (id int, name char(1), no1 int,no2 int);
    insert into tb1 
     select 1,'A',1,-1 union all select 1,'B',1,1 union all
     select 2,'A',2,-2 union all select 2,'B',2,2 union all
     select 3,'A',3,-3 union all select 3,'B',-1,3 union all
     select 4,'A',4,1 union all select 4,'B',-2,4 union all
     select 5,'A',-1,2 union all select 5,'B',1,5 union all
     select 6,'A',-1,-1 union all select 6,'B',2,6;
     
    with t as (
    select id,name,no1,
    max(abs(no1)) over (partition by name,id-abs(no1)) max1
    from tb1
    )
    select id,name,no1 from t where abs(max1)=abs(no1);
    /*
    4 A 4
    5 A -1
    6 A -1
    2 B 2
    4 B -2
    6 B 2
    */-- no2 同样处理drop table tb1;