表是这样
Gid Gdate Gvol
G001 2013-01-30 142.7
G007 2013-01-29 105.7
G007 2013-01-21 99.0
G001 2013-01-21 139.3
G007 2013-01-16 95.5
G001 2013-01-15 134.4
G007 2013-01-15 95.8
G007 2013-01-23 106.9
G001 2013-01-23 141.1
G001 2013-01-14 131.6
G007 2013-01-14 79.6
G001 2013-01-12 115.1
G007 2013-01-13 74.6
G001 2013-01-11 114.6
G007 2013-01-10 76.9
G001 2013-01-09 116.2
G007 2013-01-09 82.3
G001 2013-01-08 115.8
G007 2013-01-08 81.5
G001 2013-01-07 115.1
G007 2013-01-07 80.5
G001 2013-01-06 114.6
G007 2013-01-06 80.3
G001 2012-12-30 110.0
G001 2013-01-16 136.6
G007 2013-01-20 101.1
G001 2013-01-22 139.4
G007 2013-01-17 94.3
G001 2013-01-17 138.6
G007 2013-01-19 94.9
G001 2013-01-18 136.3
....现在想是用TSQL把某个时间点过去N天时间段内Gid相同,Gvol是递减的数据列出来,比如:G001,G007在2013/1/9这个时间点过去4天,gvol递减
G001 2013/1/9 116.2
G001 2013/1/8 115.8
G001 2013/1/7 115.1
G001 2013/1/6 114.6
G001 2012/12/30 110.0
G007 2013/1/9 82.3
G007 2013/1/8 81.5
G007 2013/1/7 80.5
G007 2013/1/6 80.3
G007 2013/1/4 79.6
....

解决方案 »

  1.   

    试试这个:
    select *
    from tb
    where gid in ('G001','G007') 
    and gdate <= '2013-01-09'
    and gdate >= datediff(day,3,'2013-01-09')
    order by gid,gdate
      

  2.   

    试了,2013-01-09这个时间段内输出是对,但是过去4天的Gvol没经过比较,换个别的日期就不行了
    Gid有几百个
      

  3.   


    哦 ,什么是gvol没经过比较,是没有排序吗?改成这样试试:select *
    from tb
    where gid in ('G001','G007') 
    and gdate <= '2013-01-09'
    and gdate >= datediff(day,3,'2013-01-09')
    order by gid,gdate,gvol
      

  4.   

    修改一下:
    select *
    from tb
    where gid in ('G001','G007') 
    and gdate <= '2013-01-09'
    and gdate >= datediff(day,3,'2013-01-09')
    order by gid,gdate desc,gvol desc
      

  5.   


    哦 ,什么是gvol没经过比较,是没有排序吗?[/code]
    没说清楚,过去4天的Gvol是从大到小,不是排序,像这样
    2013-01-17 和 2013-1-30 过去4天,Gvol是从大到小的,不是排序
    G001 2013-01-17 138.6
    G001 2013-01-16 136.6
    G001 2013-01-15 134.4
    G001 2013-01-14 131.6
    G001 2013-01-12 115.1G001 2013-01-30 142.7
    G001 2013-01-23 141.1
    G001 2013-01-22 139.4
    G001 2013-01-21 139.3
    G001 2013-01-18 136.3
      

  6.   


    哦 ,什么是gvol没经过比较,是没有排序吗?[/code]
    没说清楚,过去4天的Gvol是从大到小,不是排序,像这样
    2013-01-17 和 2013-1-30 过去4天,Gvol是从大到小的,不是排序
    G001 2013-01-17 138.6
    G001 2013-01-16 136.6
    G001 2013-01-15 134.4
    G001 2013-01-14 131.6
    G001 2013-01-12 115.1G001 2013-01-30 142.7
    G001 2013-01-23 141.1
    G001 2013-01-22 139.4
    G001 2013-01-21 139.3
    G001 2013-01-18 136.3还是没明白,你的意思是,你只需要,比如goo1,然后比如从9号开始,过去4天的gvol都是递减的吗,如果有一条不是递减,就所有的都不要,还是只这一条不需要。
      

  7.   


    哦 ,什么是gvol没经过比较,是没有排序吗?[/code]
    没说清楚,过去4天的Gvol是从大到小,不是排序,像这样
    2013-01-17 和 2013-1-30 过去4天,Gvol是从大到小的,不是排序
    G001 2013-01-17 138.6
    G001 2013-01-16 136.6
    G001 2013-01-15 134.4
    G001 2013-01-14 131.6
    G001 2013-01-12 115.1G001 2013-01-30 142.7
    G001 2013-01-23 141.1
    G001 2013-01-22 139.4
    G001 2013-01-21 139.3
    G001 2013-01-18 136.3还是没明白,你的意思是,你只需要,比如goo1,然后比如从9号开始,过去4天的gvol都是递减的吗,如果有一条不是递减,就所有的都不要,还是只这一条不需要。

    过去4天的gvol都是递减的,如果有一条不是递减的就所有的都不要,像上面的数据
    G001 2013-01-30 142.7
    G001 2013-01-23 141.1
    G001 2013-01-22 139.4
    G001 2013-01-21 239.3
    G001 2013-01-18 136.3
    我把139.3改成239.3之后 前3天符合递减条件,第4天Gvol比第3天的大,那这5天的数据不是要查询的结果
    (如果只是查找3天,3个时间段内只有一个查询结果是符合条件,即22到30日符合,21到23不符合,18到22不符合)
      

  8.   


    哦 ,什么是gvol没经过比较,是没有排序吗?[/code]
    没说清楚,过去4天的Gvol是从大到小,不是排序,像这样
    2013-01-17 和 2013-1-30 过去4天,Gvol是从大到小的,不是排序
    G001 2013-01-17 138.6
    G001 2013-01-16 136.6
    G001 2013-01-15 134.4
    G001 2013-01-14 131.6
    G001 2013-01-12 115.1G001 2013-01-30 142.7
    G001 2013-01-23 141.1
    G001 2013-01-22 139.4
    G001 2013-01-21 139.3
    G001 2013-01-18 136.3还是没明白,你的意思是,你只需要,比如goo1,然后比如从9号开始,过去4天的gvol都是递减的吗,如果有一条不是递减,就所有的都不要,还是只这一条不需要。

    过去4天的gvol都是递减的,如果有一条不是递减的就所有的都不要,像上面的数据
    G001 2013-01-30 142.7
    G001 2013-01-23 141.1
    G001 2013-01-22 139.4
    G001 2013-01-21 239.3
    G001 2013-01-18 136.3
    我把139.3改成239.3之后 前3天符合递减条件,第4天Gvol比第3天的大,那这5天的数据不是要查询的结果
    (如果只是查找3天,3个时间段内只有一个查询结果是符合条件,即22到30日符合,21到23不符合,18到22不符合)对了,你的是2000,还是2005的呢
      

  9.   

    对了,你的是2000,还是2005的呢
    2005,2008都用刚才仔细看了,你的这个需求,相当复杂。相当于你要查找所有,如果指定4,那么每4条数据,gvol都不需要递减
      

  10.   

    分三步:1.先查出所欲查时间段的所有gvol值;
           2.再按Gid值(如你所举例G001与G007)分类;
           3.再在相同的Gid值内按你所需的递减条件去查寻,符合条件的显示,不符合的则放弃,以此类推分别查出各Gid值内的符合条件的数据.