SQL查询问题!(50分)

  • 主题发起人 主题发起人 jiarui
  • 开始时间 开始时间
J

jiarui

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个数据表
noid(编号) Ddate(日期) sl(数量)
0001 20030101 800
0001 20030102 600
0001 20030103 400
0002 20030101 10000
0003 20030101 1100
0003 20030102 1200
0003 20030103 1300
想通过SQL查询实现:
查询结果为日期(Ddate)增大时数量(sl)同时增大或同一NOID只有一条记录
即结果为
noid(编号) Ddate(日期) sl(数量)
0002 20030101 10000
0003 20030101 1100
0003 20030102 1200
0003 20030103 1300
而下面记录不显示
noid(编号) Ddate(日期) sl(数量)
0001 20030101 800
0001 20030102 600
0001 20030103 400
 
没看懂你的意思,同一NOID只有一条记录是什么意思?Ddate和sl字段以谁的为准?
 
select a.noid,a.ddate,a.sl
from tablename a,tablename b
where a.noid=b.noid and a.ddate<b.ddate and a.sl<b.sl
具体没试,用个自连接试一下
 
表中记录NOID=0002的只有一条记录,查询时也要查出来
noid(编号) Ddate(日期) sl(数量)
0002 20030101 10000
 
虽然比较费解,但俺还是看明白了!
不过如果存在这种情况:
noid(编号) Ddate(日期) sl(数量)
0001 20030101 400
0001 20030102 800
0001 20030103 600
那么,查询结果为:
0001 20030101 400
0001 20030102 800
还是:
0001 20030101 400
0001 20030103 600
类似这种情况的规则是什么?
 

select noid,Ddate,sl=max(sl) from tablename group by noid,Ddate

不就行了,有什么问题吗?
 
用一个存储过程来实现比较好。
使用游标来解决这两个问题。
 
to 微湖水生
您所说的情况:
noid(编号) Ddate(日期) sl(数量)
0001 20030101 400
0001 20030102 800
0001 20030103 600
查询结果为空

 
再问:
1.是否可保证不存在我说的那种情况(也就是一定按照升序或降序排列)
2.Ddate(日期)是否一定连续?
 
to 微湖水生
1、情况存在,但要求查询是滤除;
2、Ddate不连续
 
楼主:
先说一下我的理解:如果同一noid(编号)的记录中有一对不满足按时间增序排列
则排除本noid(编号)对应的所有记录,于是有此查询:
select * from T_idsl
where noid not in
(select T1.noid
from T_idsl as T1,T_idsl as T2
where T1.noid=T2.noid
and T1.Ddate>T2.Ddate and T1.sl<T2.sl
union
select T2.noid
from T_idsl as T1,T_idsl as T2
where T1.noid=T2.noid
and T1.Ddate>T2.Ddate and T1.sl<T2.sl)
这个查询我试验过,应该可以,其中子查询为查询不符合条件的记录;
另,子查询部分应该可以再简化一下!
 
接受答案了.
 
后退
顶部