求关于循环的sql

tds__609 2014-02-21 11:26:18
表:

集装箱号 循环开始时间 循环结束时间

SOC001 2012-01-01 2013-01-01
SOC001 2013-01-02 2014-01-01
SOC001 2014-01-02 (空)
SOC002 2013-03-01 2014-02-01
SOC002 2014-02-02 (空)
SOC003 2014-01-04 (空)


现在查找记录,检索条件 “最近结束循环的记录”。
比如输入1.(代表最新一圈)
查询结果:
SOC001 2013-01-02 2014-01-01
SOC002 2013-03-01 2014-02-01
输入2.(代表最新2圈,不够2圈的,显示1圈的)
SOC001 2012-01-01 2013-01-01
SOC001 2013-01-02 2014-01-01
SOC002 2013-03-01 2014-02-01
...全文
104 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tds__609 2014-02-21
  • 打赏
  • 举报
回复
没人么????
ymz316 2014-02-21
  • 打赏
  • 举报
回复
如果不需要今年循环没结束的则可以这样:

select * from test 
where convert(int,datename(year,循环开始时间)) between convert(int,datename(year,getdate()))-最新的圈数 and convert(int,datename(year,getdate()))-1
ymz316 2014-02-21
  • 打赏
  • 举报
回复

select * from 表 
where convert(int,datename(year,循环开始时间)) >= convert(int,datename(year,getdate()))-最新的圈数

  • 打赏
  • 举报
回复
分给2楼吧
  • 打赏
  • 举报
回复
参照@dotnetstudio 增加了结束日期不为NULL,

create table test (id nvarchar(10),srq datetime,erq datetime)
insert into test 
select 'SOC001','2012-01-01','2013-01-01' union all
select 'SOC001','2013-01-02','2014-01-01' union all
select 'SOC001','2014-01-02',null union all
select 'SOC002','2013-03-01','2014-02-01' union all
select 'SOC002','2014-02-02',null union all
select 'SOC003','2014-01-04',null 

select * 
from (
		select *,
				ROW_NUMBER() over(partition by id order by erq desc) as rn 
		from test
	 ) t
where t.rn<=2 and t.erq is not null
KeepSayingNo 2014-02-21
  • 打赏
  • 举报
回复
如果你要取最新的2个,就修改t.rn=2
KeepSayingNo 2014-02-21
  • 打赏
  • 举报
回复

select * from (select *,ROW_NUMBER() over(partition by [集装箱号] order by [循环开始时间] desc) as rn from 表) t
where t.rn=1

34,593

社区成员

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

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