一段SQL(再现等待,100分)

princesky 2003-07-10 11:18:54
表A如下:
用户名 开始年月 结束年月
A 2002/04 2003/03
A 2003/04 2003/09
A 2003/10 2004/03

用户名=A,处理年月=2003/06,根据“处理年月“抽数据。
有三种数据:
1)一致的数据
开始年月≦处理年月≦结束年月
2)未来的数据
处理年月≦开始年月
3)过去的数据
结束年月≦处理年月

按优先顺序是(1)-(3)抽出一条记录。
列:当表里没有1)的记录(一致的年月),就抽出2)这条数据:
A 2003/10 2004/03 (未来的数据)

...全文
17 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2003-07-10
  • 打赏
  • 举报
回复
不用临时表
select 用户名,开始年月,结束年月 from
(
select 3 as 优先级,* from a
where @yy between 开始年月 and 结束年月
union
select 1,* from a
where @yy<=开始年月
union
select 2,* from a
where 结束年月<=@yy
) aa
where 优先级=case when exists(select 1 from a where @yy<=开始年月) then 1
when exists(select 1 from a where 结束年月<=@yy) then 2
else 3 end

wyb0026 2003-07-10
  • 打赏
  • 举报
回复

select 用户名 , 开始年月 , 结束年月
(select 用户名 , 开始年月 , 结束年月,case when 开始年月≦处理年月≦结束年月
then 1 when 结束年月≦处理年月 then 2 when 处理年月≦开始年月 then 3 end as sort
from table )
order by sort
zjcxc 元老 2003-07-10
  • 打赏
  • 举报
回复
declare @yy int
set @yy=200306

select * into #temp from
(
select 3 as 优先级,* from a
where @yy between 开始年月 and 结束年月
union
select 1,* from a
where @yy<=开始年月
union
select 2,* from a
where 结束年月<=@yy
) aa
order by 优先级

select 用户名,开始年月,结束年月
from #temp
where 优先级=(select min(优先级) from #temp)
zjcxc 元老 2003-07-10
  • 打赏
  • 举报
回复
那你的意思是,按照优先级排列的话
依次是:条件2,条件3,条件1

是这样的吗?并且,只取出优先级最高的记录:
princesky 2003-07-10
  • 打赏
  • 举报
回复
有人可能还看不明白,简单点说吧。
就是,三条记录都存在的话就抽出第二条记录;第二条记录不存在的话抽出第三条记录。
suncom_zhu 2003-07-10
  • 打赏
  • 举报
回复

IF EXISTS(SELECT * FROM TABLENAME WHERE 用户名='A' and 开始年月<='2003/06' and 结束年月>='2003/06')
PRINT '一致的数据'
SELECT * FROM TABLENAME WHERE 用户名='A' and 开始年月<='2003/06' and 结束年月>='2003/06'

ELSE
PRINT '未来的数据'
SELECT * FROM TABLENAME WHERE 用户名='A' and 开始年月>='2003/06'
CrazyFor 2003-07-10
  • 打赏
  • 举报
回复
select '1' as 优先级, * from 表 where (开始年月≦处理年月≦结束年月 你自己写一下)
union all
select '2' as 优先级, * from 表 where (处理年月≦开始年月 你自己写一下)
union all
select '3' as 优先级, * from 表 where (结束年月≦处理年月 你自己写一下)

再把优先级最高的同名用户取出来就可以了.

zjcxc 元老 2003-07-10
  • 打赏
  • 举报
回复
不明白
按照你的要求,你的结果不太对吧?
你的第二条记录是满足你的第一个条件的啊

34,575

社区成员

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

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