这样的情况可以用一个SQL写出来吗

likesome 2004-06-10 11:04:58
有一个表
结构如下
表1
iName
a
b
c

表2
iName iDate iNum
a 200403 200
a 200404 200
a 200406 250

b 200403 300
b 200405 200
b 200406 500

c 200405 100
c 200406 100

求出表2中iName在当前月份(如200406)与上一月份(可以是不连续的月份,只要存在)的iNum之差大于100的表1中iName的记录

如上面的记录,b项目为符合条件的记录
因为b在
200406与200405的iNum之差为符合条件的记录



...全文
154 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackjingsg 2004-06-11
  • 打赏
  • 举报
回复
都不错
CSDMN 2004-06-11
  • 打赏
  • 举报
回复
select iName from 表1 x
where exists (
(select 1 from 表2 a,表2 b
where a.iname=b.iname and a.iname=x.iname
and a.idate='200406'
and b.iDate=(select max(iDate) from 表2 where iDate<a.iDate and iname=a.iname)
and a.iNum-b.iNum>100
)
CSDMN 2004-06-11
  • 打赏
  • 举报
回复
select iName from 表1 x
where exists (
(select 1 from 表2 a,表2 b
where a.iname=b.iname and a.iname=x.iname
and a.idate='200406'
and b.iDate=(select max(iDate) from 表2 where iDate<a.iDate)
and a.iNum-b.iNum>100
)
tangxiaosan001 2004-06-11
  • 打赏
  • 举报
回复
select iName from 表1 where iName in
(select a.iname from 表2 a,表2 b
where a.iname=b.iname and a.iNum-b.iNum>100 and
iDate=(select max(iDate) from 表2 where iDate<a.iDate where a.iname=b.iname))
likesome 2004-06-11
  • 打赏
  • 举报
回复
哈哈,果然都是高手,没想到真的可以一条语句出来,我都用了临时表了
zjcxc 元老 2004-06-10
  • 打赏
  • 举报
回复
--不知道有没有理解错.

select * from 表2 a
where exists( --要求在表1中存在
select 1 from 表1 where iName=a.iName
)
and exists( --要求与一上月份之差大于100(月份可以不连续)
select 1 from 表2
where iName=a.iName and iDate<a.iDate
and a.iNum-iNum>100)
and iDate=(--要求是当前月份的(最大的一个月)
select max(iDate) from 表2 where iName=a.iName
)
JohnShen 2004-06-10
  • 打赏
  • 举报
回复
下面语句可以基本满足你的要求,但没有考虑
1、最新的月份为当前月份
2、存在某一类只有1个月数据的情况

select iName from a where
abs((select Sum(iNum) From
(Select Top 2 iNum From b Where iName=a.iName Order by iDate Desc) as t)
-2*(select Top 1 iNum From b Where iName=a.iName Order by iDate Desc)
)>100
Jianli2004 2004-06-10
  • 打赏
  • 举报
回复
select iName from 表1 where iName in
(select a.iname from 表2 a,表2 b
where a.iname=b.iname and abs(a.iNum-b.iNum)>100 and
b.iDate=(select max(iDate) from 表2 where iDate<a.iDate))

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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