如下select如何写?

mikyxyc 2003-11-18 04:06:06
数据库有如下表

代码 比例 日期
500001 1.0 2003-10-10
500001 1.2 2003-9-9
500001 1.3 2003-8-8
500002 2.1 2003-10-10
500002 2.3 2003-9-9
500002 2.4 2003-8-8

请问怎样实现这样的功能:
求出指定日期的不重复代码,比例,与上一日期的比例差.
具体在上表中,如指定日期是2003-10-10,那它的上一日期就是2003-9-9
我要的结果应该是:
代码 比例  与上一日期比例差
500001 1.0 -0.2
500002 2.1 -0.2

如果用一条select语句不能实现,那用procedure怎样写?
...全文
33 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mikyxyc 2003-11-19
  • 打赏
  • 举报
回复
谢谢大力,问题解决。
同时也要谢谢另外两位的热心解答,但你们两位的答案都错了,因为数据库中的日期值不是连续的,所以“datadiff(d,b.日期,a.日期) = 1)”不能求出已知日期的上一日期,同样“@d-1”也是如此。
pengdali 2003-11-18
  • 打赏
  • 举报
回复
declare @d datetime
set @d='2003-10-10'

select *,比例-(select top 1 比例 from 表 where 代码=tem.代码 and 日期<@d order by 日期 desc) 与上一日期比例差 from 表 tem where 日期=@d


如果你的日期列有里面有时间信息:

declare @d datetime
set @d='2003-10-10'

select *,比例-(select top 1 比例 from 表 where 代码=tem.代码 and 日期<@d order by 日期 desc) 与上一日期比例差 from 表 tem where datediff(day,日期,@d)=0
pengdali 2003-11-18
  • 打赏
  • 举报
回复
declare @d datetime
set @d='2003-10-10'

select *,比例-(select top 1 比例 from 表 where 代码=tem.代码 and 日期<tem.日期 order by 日期 desc) 与上一日期比例差 from 表 tem where 日期=@d
zjcxc 元老 2003-11-18
  • 打赏
  • 举报
回复
--上面的错了一点:

--一条语句可以
declare @d datetime
set @d='2003-10-10' --定义要查询的日期,这个只是处理上方便,你可以不定义变量,直接将日期代入


select 代码,比例
,与上一日期比例差=比例-(select 比例 from 表 where 代码=a.代码 and 日期=@d-1)
from 表 a where 日期=@d

--或:
select a.代码,a.比例
,与上一日期比例差=a.比例-b.比例
from 表 a join 表 b on a.代码=b.代码
where a.日期=@d and b.日期=@d-1
zjcxc 元老 2003-11-18
  • 打赏
  • 举报
回复
--一条语句可以
declare @d datetime
set @d='2003-10-10' --定义要查询的日期

select 代码,比例
,与上一日期比例差=(select 比例 from 表 where 代码=a.代码 and 日期=@d-1)
from 表 a where 日期=@d
Coolyu0916 2003-11-18
  • 打赏
  • 举报
回复
select 代码,比例 - (select 比例 from t1 b where a.代码 = b.代码 and datadiff(d,b.日期,a.日期) = 1)
from t1 a
hillhx 2003-11-18
  • 打赏
  • 举报
回复
对不起啊,刚才忘记了个条件“a.代码 = b.代码”

select 代码,比例 - (select 比例 from t1 b where a.代码 = b.代码 and datadiff(day,b.日期,a.日期) = 1)
from t1 a

我忘记DATEDIFF函数的具体用法了,反正思路就是这样,其它的你自己查一下函数的帮助就好了
hillhx 2003-11-18
  • 打赏
  • 举报
回复
select 代码,比例 - (select 比例 from t1 b where datadiff(day,a.日期,b.日期) = 1)
from t1 a

我忘记DATEDIFF函数的具体用法了,反正思路就是这样,其它的你自己查一下函数的帮助就好了

34,603

社区成员

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

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