大家帮忙看看这个sql该怎么写?

lw8123 2009-11-09 01:45:03
表A(id char(10), freedate char(8)),表B(id char(10), optdate char(8), sum decimal(10,2)),表A的id是主键,表B是纵表,一个id会对应多条记录。
现在想让B外连接A,得到B中B.optdate<A.freedate and B.id=A.id的最大日期对应的sum的值。
例如: A中记录(1, '20091001') B 中记录(1,'20091021',100) (1, '20090801', 200) (1, '20090901', 300)
想写一个如下所示的sql:
select A.* from A left outer join ( ..... ) b on b.id = a.id
因为B.optdate<A.freedate有两条记录,取这两条记录中optdate最大值的记录的sum,即300,得到结果:
A.id A.freedate B.sum
1 20090901 300

不知道说明白没有, 折腾半天也写不出来,谢谢大家了。
...全文
75 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangyong121125 2009-11-12
  • 打赏
  • 举报
回复
select a.id, a.freedate, b.sum
from A a, B b
where a.id = b.id
and b.optdate = (select max(c.optdate) from B c
where a.id = c.id and c.optdate < a.freedate)
thedesert 2009-11-09
  • 打赏
  • 举报
回复

select a.id, a.freedate, sum(b.sum)
from A a, B b
where a.id = b.id
and b.optdate = (select max(c.optdate) from B c
where a.id = c.id and c.optdate < a.freedate)
WWWWA 2009-11-09
  • 打赏
  • 举报
回复
SELECT A.id,A.freedate,SUM(B.sum) FROM A LEFT JOIN B ON
B.optdate <A.freedate and B.id=A.id
GROUP BY A.id,A.freedate

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧