表是这样
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
....
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
....
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
Gid有几百个
哦 ,什么是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
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
哦 ,什么是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
哦 ,什么是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都是递减的吗,如果有一条不是递减,就所有的都不要,还是只这一条不需要。
哦 ,什么是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不符合)
哦 ,什么是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的呢
2005,2008都用刚才仔细看了,你的这个需求,相当复杂。相当于你要查找所有,如果指定4,那么每4条数据,gvol都不需要递减
2.再按Gid值(如你所举例G001与G007)分类;
3.再在相同的Gid值内按你所需的递减条件去查寻,符合条件的显示,不符合的则放弃,以此类推分别查出各Gid值内的符合条件的数据.