SQL,同张表中比较数据的sql问题!(100分)

  • 主题发起人 主题发起人 江西的delphi
  • 开始时间 开始时间

江西的delphi

Unregistered / Unconfirmed
GUEST, unregistred user!
有一表M(关键字=日期+编号)
日期 编号 价格
2002-04-01 01 12.3
2002-04-01 02 22.3
2002-04-01 03 32.3
2002-05-01 01 12.3
2002-05-01 02 22.3
2002-05-01 03 32.3
2002-06-01 02 22.3
2002-06-01 03 32.3
2002-07-01 01 12.3
2002-07-01 02 22.3
2002-07-01 03 12.3
用dbgrid筛选出7月份(也可能是别的月份)数据,并以此为基数据
在edit输入2则在7月份数据中查询出
相同编号在接近7月的两个月(6月,5月)
的数据中价格都相同的数据,如上面结果应为
日期 编号 价格
2002-07-01 02 22.3
如果输入3则在三个月(6,5,4月)中比较

请指教用sql语句,存贮过程,还是临时表,还是...具体怎么做?
 
是不是想做个选择,如
在7月份,列出5、6月份的相同价格的数据
select * from table where price=22.3 and date between 5 6 and 编号=02
 
to:snjat
谢谢,5,6月份数据(相同编号的价格)都要和7月份比较,如果都相同则显示。
 
把5,6,7 月份的数据分别当成一个表,然后来比较,取得数据
 
用带条件的SQL不就行了
between :month1 :month2
 
to:完颜康,
那要动态生成临时表或视图(临时表或视图数量不确定),所以不好做.
不知有没有简便,直接用sql解决的方法!
 
to:iie
对,有点启发,回去我再想想!
 
select a.日期, a.编号, a.价格 from M a, M b
where a.编号=b.编号 and a.价格=b.价格 and a.日期<>b.日期
and a.日期> '2002-04-01'
上面的语句是固定查找4月份以后的重复数据
日期与你输入的条件之间的转换要看你是什么数据库
 
为什么不用临时表
 
while not query1.eof do //query1查询7月的数据
select * from table where (price=:price) and (date between 5 6) and
(bianhao=:bianhao)
我没试过,但我觉得应该能行
 
根据我上面的SQL语句得出记录数,
如你输2,如果2 个月份都相同,应返回2,如只有1个月份相同,返回的记录数必不等2
等于2,你就显示
 
SELECT 日期,编号,价格
FROM table1 AAA
WHERE year(日期)=2002 and
month(日期)=7 and
(select count(*) from table1
where 编号=AAA.编号 and
价格=AAA.价格 and
日期<AAA.日期 and
日期>=dateadd(mm,-2,AAA.日期))=2

如是输入3,将最后的-2和2改成-3和3即可。
 
怎么好久没见你上QQ呀.

用存储过程吧,查询的临时表,用游标也行的,
 
日期型的是一种特殊的浮点型,
可对它进行加减处理,还行进日期的增减,
比如你对一个1999-12-01的日期加上(1999-10-01)-(1999-09-01)的这个常数,
就可以得到2000-01-01的日期。
你的这问题可这样解决了,
 
QuickSilver,snjat方法最方便,谢谢其他各位的帮助/。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
876
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
680
import
I
后退
顶部