求教一个SQL语句的写法!重赏!(300分)

  • 主题发起人 主题发起人 Aloney
  • 开始时间 开始时间
A

Aloney

Unregistered / Unconfirmed
GUEST, unregistred user!
有这样一个表:
A B C D
------------------------------------
1 1000 2001-01-01 23
2 1000 2001-01-01 553
3 1000 2001-01-01 54
1 1001 2001-01-01 44
2 1002 2001-01-01 54
1 1001 2001-01-01 11
1 1003 2001-01-02 12
4 1001 2001-01-02 13
.....
说明:A列的值为1-4中的一个,B列为产品编号,C为录入时间,D为参数值;
而且
(1)在一天里每个产品对应的A的值的0-4个,个数不确定。
(2)每天出现的产品编号不确定,也可能一个编号在不连续的日期里出现
结果要求为:给出A的确定值,在这个A值里列出出现过的B的值,不能重复,而且找到
最新的一个B对应的D列的值,得出结果。
如上表结果为( A = 1 )
A B C D
------------------------------------
1 1000 2001-01-01 23
1 1001 2001-01-01 44
1 1003 2001-01-02 12

请为用什么方法可以的到这个结果?

我用光标法已经实现了,但速度太慢,请赐教其他方法,多谢了!
 
select a,distinct b,c,d from tablename
where a=:s
order by b,c desc
执行时给参数s赋值就行。
 
select A,distinct(B),C,D
from YourTable
where A='1' //或where A=:Temp
 
select A,distinct(B),C,D from Table where A='1'
 
应当不是太难,因为不知道你所用的数据库,所以只能大概说说(SQL Server方式)。

1、选入临时表
select NUM=identity(int,1,1),A,B,C,D into #tt1 from Tabel where A=1

2、删除B相同,日期小于最后日期的行
delete #tt1 from #tt1 T1,(select max(C) C from #tt1 T2 where T2.B=T1.B) T3
where T1.C<T3.C

3、删除B相同,日期相同的任意一行
delete #tt1 from #tt1 T1,(select max(NUM) from #tt1 T2 where T2.B=T1.B) T3
where T1.NUM<T3.NUM

大概就是这样了。
 
select a,b, max(c) c,sum(d)
from Table
where a='1'
group by a,b
你得保证没用A+B+C是一样的, 看你的题目 C 应是唯一的
 
这样的问题,不至于用cursor吧。
看看这个帖子 341534
 
捡分来的说
 
多人接受答案了。
 
后退
顶部